2016-02-26 5 views
0

Я пробовал все в сообщении this, но я не могу изменить цвет фона. Что я делаю неправильно, чтобы он не менял цвет фона?Невозможно изменить фон JFrame

Основной класс, который вызывает DrawGui:

класс
public class JavaApp { 
    public static void main(String[] args) { 
     try { 
      UIManager.setLookAndFeel("javax.swing.plaf.metal.MetalLookAndFeel"); 
     } catch (ClassNotFoundException ex) { 
      Logger.getLogger(JavaApp.class.getName()).log(Level.SEVERE, null, ex); 
     } catch (InstantiationException ex) { 
      Logger.getLogger(JavaApp.class.getName()).log(Level.SEVERE, null, ex); 
     } catch (IllegalAccessException ex) { 
      Logger.getLogger(JavaApp.class.getName()).log(Level.SEVERE, null, ex); 
     } catch (UnsupportedLookAndFeelException ex) { 
      Logger.getLogger(JavaApp.class.getName()).log(Level.SEVERE, null, ex); 
     } 

     javax.swing.SwingUtilities.invokeLater(new Runnable() { 
      public void run() { 
       DrawGui.createAndShowGUI(""); 
      } 
     }); 
    } 
} 

Gui Строительство:

public class DrawGui extends JFrame { 
    public DrawGui(String name) { 
     super(name); 
     setResizable(false); 
    } 

    public static void createAndShowGUI(String type) {   
     DrawGui frame = new DrawGui("Java App"); 

     frame.getContentPane().setBackground(Color.RED); 

     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.defaultMenu(frame.getContentPane()); 
     frame.pack(); 
     frame.setVisible(true); 
    } 

    public void defaultMenu(final Container pane) { 
     JPanel infoBox = new JPanel(); 
     infoBox.setLayout(new GridLayout(1,2)); 

     infoBox.add(new Label("Benutzer: " + GlobalValues.USERNAME)); 
     infoBox.add(new Label("Version: " + GlobalValues.VERSION_NUMBER)); 

     pane.add(infoBox, BorderLayout.SOUTH); 
    } 
} 
+2

Ваша рамка имеет на самом деле красный фон, но южная панель имеет цвет по умолчанию, и он скрывает цвет контейнера. Сделайте свой кадр изменчивым и измените его размер, вы увидите. – Berger

+1

Обычно 'JPanel' имеет непрозрачный фон. Попробуйте установить 'infoBox.setOpaque (false);'. –

+0

Возможно, вы просто хотите установить фон infoBox на красный. – Selim

ответ

4

Есть две проблемы с вашим кодом прямо сейчас. Во-первых, JPanel, который вы добавляете в область содержимого, непрозрачен, что означает, что он заблокирует фон JFrame. Поэтому либо установите цвет на нем, либо используйте setOpaque false.

Если вы используете setOpaque, то у вас возникает проблема, когда сами блоки блокируют фон. Замените их правильным компонентом Swing (JLabel), и эта проблема исчезнет. Как правило, не рекомендуется смешивать компоненты Swing и AWT, подобные этому.

Смежные вопросы