2017-06-15 4 views
0

、私はコンボボックスで選択した色名にフレームの背景色を設定しようとしていてください。私はrepaint()メソッドを使用しましたが、それはまだ動作しません。のJava:私はコンボボックスに対応する選択した色名にフレームの背景色を設定するにはどうすればよい

はJFrameのクラスが着色することができないということですか?または、これを行う別の方法がありますか?以下は、私が試したものです:

は誰でもいくつかのスニペットを支援することができますしてください?

+0

、あなたのグラフィックスを更新しますか?私のために立派に動作し – Peri461

+1

'container.repaintを()'試してみてください。デバッグをしましたか?リスナーコードのif文はこれまで実行されていますか?あなたのコンテナ変数が実際にフレームに表示されるコンテンツペインを指していないと思われます。問題を示す[mcve]を投稿してください。フレームとコンボボックスだけが必要です。 – camickr

答えて

0

私は自分自身の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(); 
    } 

} 
関連する問題