2016-02-26 68 views
0

我試過所有在this後,但我似乎無法改變背景顏色。我做錯了什麼,以便它不會改變背景顏色?無法更改背景JFrame

Main類調用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(""); 
      } 
     }); 
    } 
} 

桂大廈類:

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,則會遇到問題,其中Label本身會阻止背景。將它們替換爲正確的Swing組件(JLabel),並且問題消失。混合Swing和AWT組件通常不是一個好主意。