【问题标题】:Java JRadioButtonJava JRadioButton
【发布时间】:2016-03-13 01:23:03
【问题描述】:

我对这段代码有疑问 当我单击文件并单击新建时,新面板出现在屏幕上,当我想更改 JRadioBox 状态以更改标签状态时,标签状态更改但面板也消失了:(

public class MainClass {

    public static void main(String[] args) {
        new MainFrame();
    }
}

class Toolbar extends JPanel {

    private JRadioButton Status1;
    private JRadioButton Status2;
    private ButtonGroup radioButtonGroup;

    public Toolbar() {
        super();
        setLayout(new FlowLayout());
        Status1 = new JRadioButton("Status1");
        Status2 = new JRadioButton("Status2");

        radioButtonGroup = new ButtonGroup();
        radioButtonGroup.add(Status2);
        radioButtonGroup.add(Status1);

        Status1.addItemListener(new ItemListener() {

            @Override
            public void itemStateChanged(ItemEvent e) {
                MainFrame m = new MainFrame();
                m.l.setText("Status1");
            }
        });
        Status2.addItemListener(new ItemListener() {

            @Override
            public void itemStateChanged(ItemEvent e) {
                MainFrame m = new MainFrame();
                m.l.setText("Status2");
            }
        });

        add(Status1);
        add(Status2);
    }
}

 class Panel extends JPanel {

    public Panel() {
        super();
        setBackground(Color.MAGENTA);
    }

}

 class MenuBar extends JMenuBar {

    private JMenu menu;
    private JMenuItem fileItems;
    public boolean panel = false;

    public MenuBar() {
        super();
        menu = new JMenu("File");
        add(menu);
        fileItems = new JMenuItem("New");
        menu.add(fileItems);
        fileItems.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
                MainFrame mf = new MainFrame();
                Panel p = new Panel();
                mf.addPanel(p);
                mf.add(new Toolbar(), BorderLayout.NORTH);
                repaint();
            }
        });
    }

}

 class MainFrame extends JFrame {

    public static JLabel l;
    public MainFrame() {
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        setSize(400, 400);
        l = new JLabel("No Status");
        add(l, BorderLayout.SOUTH);
        MenuBar mb = new MenuBar();
        setJMenuBar(mb);
        setVisible(true);
    }

    public void addPanel(Panel p) {
        add(p, BorderLayout.CENTER);
    }

}

【问题讨论】:

  • 无关:请学习 java 命名约定并遵守它们。并且不要扩展 JSomething,而是使用它们。
  • 面板消失了?不,它隐藏在您的新面板后面。检查拖动新面板。
  • 您听说过 cardLayout 吗?

标签: java swing jradiobutton


【解决方案1】:

停止到处制造新的 MainFrame。创建一次并在需要时维护它的句柄。

【讨论】:

  • 但我需要将它们放在不同的类中
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-17
  • 2015-09-22
  • 2016-05-14
  • 2017-04-12
  • 1970-01-01
  • 2019-05-14
  • 1970-01-01
相关资源
最近更新 更多