0

ラジオボタンのグループを作成しています。中央のパネルで、ラジオボタンをクリックすると色が変わるはずです。

すべてが正しいように見えますが...それは機能しません!メインクラスではパネルが見えますが、色は変わりません...

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

3 に答える 3

1

コンストラクターにの初期化も追加しますChoiceListenerlistener = new ChoiceListener()

于 2013-02-25T18:12:11.290 に答える
0

createButtonPanel() メソッドでは、リスナーを次のように初期化する必要があります。

listener = new ChoiceListener();    

ActionListener フィールドが存在する場合、新しい ChoiceListener オブジェクトを作成しても意味がありません。

于 2013-02-25T18:14:24.660 に答える
0

あなたはwhileループを作ることができ、毎回whileループはどのradioButtonが選択されているかをチェックします

于 2013-02-25T18:16:46.950 に答える