2012-03-05 11 views
2

私はいくつかのパネルを持ち、それぞれに異なるアイテムを含むJFrameを持っています。フレームの背景を設定するにはどうしたらいいですか?つまり、背景だけを設定した場合、項目を追加しなくても、背景は私が望むものですが、項目を追加すると背景が明確になります。同様に、最初に1つのパネルの背景を設定し、その中にいくつかのオブジェクトを挿入すると、そのアイテムはフレームに表示されず、フレームは選択した背景で色付けされます。すでにアイテムがあるパネル/フレームに背景色を設定する最も簡単な方法を教えてください。ありがとう。カスタムのバックグラウンドカラーを設定したいと思います。唯一の方法は、背景画像を設定する場合は、私はそのために行くでしょう...Javaスイングのカスタム背景

編集:私は単一の背景色をしたいです。

答えて

1

私はあなたのためにサンプルプログラムを作っていましたが、これ以外のものが必要な場合は教えてください。私はそれを両方の方法で行いました。JButtonを押すことで、JPanel上にItemを持たずに新しいColorをBackgroundに設定することも、JPanelにItemを追加して背景色を変更することもできます。あなたの質問のように思われるのは、何が期待されているか、実際に何が起こっているのか不明です。あなたがこれ以外の何かをしたいなら、私に知らせてください。

さらに、既に表示されているJPanelにアイテムを追加すると、その後にJPanelをrevalidate()およびrepaint()すると、変更が有効になります。

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

+0

@mKorbel:Thankyou :-) –

1

親フレームとすべての子Jpanelの背景色を変更する最も簡単な方法の1つは、Jframeの背景色を設定してから、すべての子Jpanelを繰り返して背景を設定することだと思います。

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

動作しません...何の背景色には存在しない正解のため – Teo

+0

+1、JFrameのための唯一の[CONTENTPANEの色を持つことができます](http://stackoverflow.com/a/9383680/714968) – mKorbel

+0

@テオ。あなたは少し具体的なことができますか?1つの色を設定する意味ですか、この色はどこでも使用されますか? – mKorbel

1

あなたの項目が含まれているパネルにsetOpaque(false)を呼び出す必要があります。

関連する問題