2012-03-05 179 views
2

我有一個JFrame,我有一些面板,每個面板都包含不同的項目。我如何設置框架背景?我的意思是,如果我只設置背景,而不添加項目,背景是我想要的背景,但如果我添加項目,背景是清晰的。同樣,如果我首先設置一個面板的背景,然後在其中插入一些對象,則該項目不會出現在該框架上,該框架將使用我選擇的背景着色。你能告訴我最簡單的方法來設置背景顏色的面板/框架已經有項目?謝謝。我想設置一個自定義的免費顏色。如果唯一的辦法就是設置背景圖片,我會喜歡...Java swing自定義背景

編輯:我希望有一個單一的背景顏色,而不是更多。

回答

1

我爲你做了一個示例程序,讓我知道,如果你想要的東西以外的東西。我已經完成了這兩種方式,你可以通過按下JButton在JPanel上設置一個沒有任何項目的新顏色,或者你可以先將Item添加到JPanel,然後更改背景顏色,這工作正常。似乎你的問題有點不清楚,究竟是什麼,以及實際發生了什麼。如果你想要別的東西,請告訴我,除此之外。

而且,你將項目添加到已顯示的JPanel,總是重新驗證()和後重繪()您的JPanel,更改生效。

import java.awt.*; 
import java.awt.event.*; 
import javax.swing.*; 

public class AddItemOrColor extends JFrame 
{ 
    private JPanel contentPane; 
    private JButton modifyItemButton; 
    private JButton modifyColorButton; 
    private ActionListener action; 
    private int count = 0; 
    private Color[] color = { 
           Color.RED, Color.BLUE, Color.GRAY, 
           Color.WHITE, Color.CYAN, Color.PINK,                                  
           Color.DARK_GRAY, Color.ORANGE, Color.MAGENTA 
          }; 

    public AddItemOrColor() 
    { 
     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     setLocationByPlatform(true); 

     contentPane = new JPanel(new FlowLayout(FlowLayout.LEFT, 3, 3)); 
     //contentPane.setMargin(new Insets(10, 10, 10, 10)); 
     contentPane.setBackground(Color.BLUE); 

     modifyItemButton = new JButton("MODIFY CONTENT"); 
     modifyColorButton = new JButton("MODIFY COLOR"); 

     action = new ActionListener() 
     { 
      public void actionPerformed(ActionEvent ae) 
      { 
       JButton button = (JButton) ae.getSource(); 

       if (count == 9) 
        count = 0; 

       if (button == modifyItemButton) 
       { 
        contentPane.add(new JLabel("LABEL " + count));     
       } 
       else if (button == modifyColorButton) 
       { 
        contentPane.setBackground(color[count]); 
       } 

       contentPane.revalidate(); 
       contentPane.repaint(); 
       count++; 
      } 
     }; 

     modifyItemButton.addActionListener(action); 
     modifyColorButton.addActionListener(action); 

     add(modifyColorButton, BorderLayout.PAGE_START); 
     add(contentPane, BorderLayout.CENTER); 
     add(modifyItemButton, BorderLayout.PAGE_END); 

     setSize(400, 400); 
     setVisible(true); 
    } 

    public static void main(String... args) 
    { 
     SwingUtilities.invokeLater(new Runnable() 
     { 
      public void run() 
      { 
       new AddItemOrColor(); 
      } 
     }); 
    } 
} 
+0

好的代碼爲OP + 1 – mKorbel 2012-03-06 08:56:40

+0

@mKorbel:Thankyou :-) – 2012-03-06 08:58:00

1

我認爲最簡單的事情就是改變父框架和所有子Jpanel的背景顏色,可以設置Jframe的背景顏色,然後遍歷所有的子Jpanel並設置背景給他們:

frame.getContentPane().setBackground(somecolor); 
for(JComponent c : frame.getComponents()) { 
if(c instanceof JPanel) { 
c.setBackground(somecolor); 
} 
} 
+0

不工作......沒有背景顏色 – Teo 2012-03-05 20:28:57

+0

+1正確答案,因爲只的JFrame [contentPane中可以有一個顏色](http://stackoverflow.com/a/9383680/714968) – mKorbel 2012-03-05 21:20:07

+0

@Theo。請你可以有點具體,你是否意味着設置一種顏色,這種顏色將在任何地方使用???, – mKorbel 2012-03-05 21:23:00

1

您應該在包含您的項目的面板上調用setOpaque(false)。