2012-03-05 181 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)。