2013-02-25 72 views
0

我正在制作一组单选按钮,并且中央的Panel应该更改点按单选按钮的颜色。Java Swing RadioButtons

一切似乎都正确,但...它不起作用! 随着主类我看到面板,但是颜色不会改变......

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

public class ChoiceFrame extends JFrame 
{ 
    public ChoiceFrame() 
    { 

     class ChoiceListener implements ActionListener 
     { 
      public void actionPerformed(ActionEvent event) 
      { 
       setTheColor(); 
      } 
     } 

     buttonPanel = createButtonPanel(); 
     add(buttonPanel, BorderLayout.SOUTH); 
     colorPanel = createColorPanel(); 
     add(colorPanel, BorderLayout.NORTH); 
     setSize(FRAME_WIDTH, FRAME_HEIGHT); 
     colorPanel.repaint(); 
    } 


    public JPanel createButtonPanel() 
    { 
     JPanel panel = new JPanel(); 
     panel.setLayout(new GridLayout(3,1)); 

     redButton = new JRadioButton("Red Colour"); 
     blueButton = new JRadioButton("Blue Colour"); 
     greenButton = new JRadioButton("Green Colour"); 

     redButton.addActionListener(listener); 
     blueButton.addActionListener(listener); 
     greenButton.addActionListener(listener); 

     ButtonGroup group = new ButtonGroup(); 
     group.add(redButton); 
     group.add(blueButton); 
     group.add(greenButton); 

     panel.add(redButton); 
     panel.add(blueButton); 
     panel.add(greenButton); 

     return panel; 
    } 

    public JPanel createColorPanel() 
    { 
     JPanel panel = new JPanel(); 
     return panel; 
    } 


    public void setTheColor() 
    { 
     if (redButton.isSelected()) 
      colorPanel.setBackground(Color.RED); 
     else if (blueButton.isSelected()) 
      colorPanel.setBackground(Color.BLUE); 
     else if (greenButton.isSelected()) 
      colorPanel.setBackground(Color.GREEN); 
    } 


    private JPanel colorPanel; 
    private JPanel buttonPanel; 

    private JRadioButton redButton; 
    private JRadioButton blueButton; 
    private JRadioButton greenButton; 

    private ActionListener listener; 

    private static final int FRAME_WIDTH = 400; 
    private static final int FRAME_HEIGHT = 400; 
} 
+4

你在哪里初始化监听器?你如何设法在构造函数中声明类? – skuntsel 2013-02-25 18:11:27

+0

你是否创建了choiceListener的新实例? – christopher 2013-02-25 18:11:30

+0

用你的'actionPerformed'内部定义的'listener = new ActionListener()'实例化匿名内部类来更改该类'声明'。 – skuntsel 2013-02-25 18:16:44

回答

1

添加在你的构造也ChoiceListener初始化。

listener = new ChoiceListener();  

没有意义,创建一个新的ChoiceListener对象时一个ActionListener字段存在: listener = new ChoiceListener()

+0

是thx那是错误的 – Alpan67 2013-02-25 18:18:00

0

在你createButtonPanel()方法,你应该初始化监听器。

0

您可以while循环,每次循环while将检查其单选按钮选择