为什么带有单选按钮的第二个面板不会出现?

时间:2012-02-14 00:57:51

标签: java swing panel jradiobutton

我们不允许在课堂上使用IDE,这是在文本板中完成的。我正在编写一个红绿灯程序,当我点击相关的交通灯颜色时,它会填充颜色并使其看起来像灯光是活跃的。

我目前无法使用其上的单选按钮显示第二个面板。我已经实例化并添加了它。

他们应该是独立的小组。

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



public class Lab4Frame extends JFrame {

    Lab4Frame(){
        setTitle("Lab 4 - Application #1");
        Lab4Panel p = new Lab4Panel();
        Lab4RadioButtonPanel p2 = new Lab4RadioButtonPanel();
        setLayout(new GridLayout(1,2));
        add(p);
        add(p2);
    }

    public static void main(String[] args){

            Lab4Frame frame = new Lab4Frame();
            frame.setTitle("Lab4 Application # 1");
            frame.setLocationRelativeTo(null);
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frame.setSize(600, 600);
            frame.setVisible(true);
    }

}

class Lab4RadioButtonPanel extends JPanel implements MouseListener {

    public Lab4RadioButtonPanel() {
        JRadioButton jrbRed = new JRadioButton("Red", true);
        JRadioButton jrbYellow = new JRadioButton("Yellow");
        JRadioButton jrbGreen = new JRadioButton("Green");
        ButtonGroup group = new ButtonGroup();
        group.add(jrbRed);
        group.add(jrbYellow);
        group.add(jrbGreen);

        jrbRed.setMnemonic('E');
        jrbGreen.setMnemonic('G');
        jrbYellow.setMnemonic('Y');
    }




            public void mouseClicked(MouseEvent e)
                {
                    /*if (e.getSource() == red){

                    }

                    else if (e.getSource() == yellow){

                    }

                    else if (e.getSource() == green){

                    }*/



                }

        public void mouseExited(MouseEvent e){}
        public void mouseReleased(MouseEvent e){}
        public void mousePressed(MouseEvent e){}
        public void mouseMoved(MouseEvent e){}
        public void mouseEntered(MouseEvent e){}
}

class Lab4Panel extends JPanel{


    public Lab4Panel(){
    }



    int height, width;
    int radius = 5;
    int x = -1;
    int y = -1;

    protected void paintComponent(Graphics g){
        if (x<0 || y<0) {
            x = getWidth() / 2 - radius;
            y = getHeight() / 2 - radius;
        }
        super.paintComponent(g);
        g.drawRect(x - 10,y - 90, 40, 120);
        //g.drawOval(x,y - 80, 4 * radius, 4 * radius);
        //g.drawOval(x,y - 40, 4 * radius, 4 * radius);
        //g.drawOval(x,y, 4 * radius, 4 * radius);
        g.drawRect(x - 5,y - 90, 40, 120);
        g.setColor(Color.RED);
        g.fillOval(x,y - 80, 4 * radius, 4 * radius);
        g.setColor(Color.YELLOW);
        g.fillOval(x,y - 40, 4 * radius, 4 * radius);
        g.setColor(Color.GREEN);
        g.fillOval(x,y, 4 * radius, 4 * radius);

    }


}

2 个答案:

答案 0 :(得分:3)

JRadioButtons永远不会添加到容器中。

答案 1 :(得分:1)

来自javadoc

  

此类用于为一组创建多重排除范围   纽扣。使用相同的ButtonGroup对象创建一组按钮   意味着“打开”其中一个按钮将关闭所有其他按钮   小组中的按钮。

并且ButtonGroup没有从Component扩展。 ButtonGroup正在“管理”添加按钮的状态。所以我们必须添加按钮而不是ButtonGroup。像Lab4RadioButtonPanel类中的构造函数Lab4RadioButtonPanel那样的东西

public Lab4RadioButtonPanel()
{
   JRadioButton jrbRed = new JRadioButton("Red", true);
   JRadioButton jrbYellow = new JRadioButton("Yellow");
   JRadioButton jrbGreen = new JRadioButton("Green");
   ButtonGroup group = new ButtonGroup();
   group.add(jrbRed);
   group.add(jrbYellow);
   group.add(jrbGreen);
   add(jrbRed);
   add(jrbYellow);
   add(jrbGreen);

   jrbRed.setMnemonic('E');
   jrbGreen.setMnemonic('G');
   jrbYellow.setMnemonic('Y');
}