私は自分自身のJPanelを作成し、コンテンツ・ペインとして設定することをお勧めします。 (コンテナが宣言されている場所とコンストラクタの2行目に注意してください)。これは一般に「クリーナー」とみなされます。
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Container;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class GUI1410 extends JFrame implements ActionListener
{
private JComboBox comboBox;
private JCheckBox background, foreground;
private JButton okButton, cancelButton;
private String[] colors = { "RED", "GREEN", "BLUE" };
private Color color[] = { Color.RED, Color.GREEN, Color.BLUE };
private JPanel checkBoxPanel, buttonPanel;
Container container = new JPanel();
public GUI1410()
{
super("ColorSelect");
setContentPane(container);
this.getContentPane().setBackground(color[0]);
comboBox = new JComboBox(colors);
comboBox.setMaximumRowCount(2);
comboBox.addItemListener(new ItemListener() {
@Override
public void itemStateChanged(ItemEvent event)
{
if (event.getStateChange() == ItemEvent.SELECTED)
{
container.setBackground(color[comboBox.getSelectedIndex()]);
container.repaint();
}
}
});
background = new JCheckBox("Background");
foreground = new JCheckBox("Foreground");
okButton = new JButton("Ok");
okButton.addActionListener(this);
cancelButton = new JButton("Cancel");
cancelButton.addActionListener(this);
checkBoxPanel = new JPanel();
checkBoxPanel.add(background);
checkBoxPanel.add(foreground);
buttonPanel = new JPanel();
buttonPanel.add(okButton);
buttonPanel.add(cancelButton);
container.add(comboBox, BorderLayout.NORTH);
container.add(checkBoxPanel, BorderLayout.CENTER);
container.add(buttonPanel, BorderLayout.SOUTH);
setVisible(true);
setBounds(400, 200, 300, 120);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
@Override
public void actionPerformed(ActionEvent event)
{
if (event.getSource() == okButton)
{
container.setBackground(color[comboBox.getSelectedIndex()]);
}
else if (event.getSource() == cancelButton)
{
System.exit(0);
}
}
public static void main(String[] args)
{
new GUI1410();
}
}
、あなたのグラフィックスを更新しますか?私のために立派に動作し – Peri461
'container.repaintを()'試してみてください。デバッグをしましたか?リスナーコードのif文はこれまで実行されていますか?あなたのコンテナ変数が実際にフレームに表示されるコンテンツペインを指していないと思われます。問題を示す[mcve]を投稿してください。フレームとコンボボックスだけが必要です。 – camickr