Почему не отображается вторая панель с переключателями? - PullRequest
1 голос
/ 14 февраля 2012

Нам не разрешено использовать 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 ]

3 голосов
/ 14 февраля 2012

JRadioButtons никогда не добавляются в контейнер.

1 голос
/ 14 февраля 2012

Из Javadoc

Этот класс используется для создания области множественного исключения для набора кнопок. Создание набора кнопок с тем же объектом ButtonGroup означает, что включение одной из этих кнопок выключает все остальные кнопки в группе.

и ButtonGroup не распространяется на Компонент. 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');
}
...