按钮按下按钮后,Java未在Jframe中显示Jpanel



我只是在制作一个用户界面,按下按钮后,我要做的就是显示,谢谢...我是新的,但据我所知,错误?我尝试使用可见的套装玩耍,无济于事...任何帮助都很好,谢谢

import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.GridLayout;
import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.Border;
import javax.swing.JTextField;
import javax.swing.JLabel;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import javax.swing.JList;


public class GuiApp1 {
  public static void main(String args[]) {
    String title = (args.length == 0 ? "CheckBox Sample" : args[0]);
    JFrame frame = new JFrame(title);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    final JPanel panel = new JPanel(new GridLayout(0, 1));
    Border border = BorderFactory.createTitledBorder("Pizza Toppings");
    panel.setBorder(border);
    JLabel label1 = new JLabel("Enter name below:");
    panel.add(label1);
    JTextField field = new JTextField(20);
    panel.add(field);
    JCheckBox check = new JCheckBox("Car0");
    panel.add(check);
    check = new JCheckBox("Car1");
    panel.add(check);
    check = new JCheckBox("Car2");
    panel.add(check);
    check = new JCheckBox("Car3");
    panel.add(check);
    check = new JCheckBox("Car4");
    panel.add(check);
    JButton button = new JButton("Submit");

    final JPanel listPanel = new JPanel();
    listPanel.setVisible(false);
    JLabel listLbl = new JLabel("Vegetables:");
    listPanel.add(listLbl);

    button.addActionListener(new ActionListener()
    {
        @Override
        public void actionPerformed(ActionEvent event)
        {
            listPanel.setVisible(!listPanel.isVisible());
            panel.setVisible(!panel.isVisible());

        }
    });
    Container contentPane = frame.getContentPane();
    contentPane.add(panel, BorderLayout.CENTER);
    contentPane.add(button, BorderLayout.SOUTH);
    frame.setSize(300, 300);
    frame.setResizable(true);
    frame.setVisible(true);
    frame.setLocationRelativeTo(null);
  }
}

不出现蔬菜面板的原因很简单:Xou永远不要将IST添加到contentPane

要使代码正常运行,您需要在按钮的ActionListener中添加/删除面板:

button.addActionListener(new ActionListener()
{
    @Override
    public void actionPerformed(ActionEvent event)
    {
        listPanel.setVisible(!listPanel.isVisible());
        panel.setVisible(!panel.isVisible());
        if (listPanel.isVisible()) {
            contentPane.remove(panel); // Vegetables are visible, so remove the Cars
            contentPane.add(listPanel, BorderLayout.CENTER); // And add the Vegetables
        } else {
            contentPane.remove(listPanel); // Vice versa
            contentPane.add(panel, BorderLayout.CENTER);
        }
    }
});

然后,您需要在contentPane声明下方移动ActionListener并将其制成final

您还应该考虑放置不同的复选框是不同的变量,因此您可以阅读它们的状态。如果您不想悬挂这么多变量,则可以将它们放入数组中。

JCheckBox[] checks = new JCheckbox[5];
checks[0] = new JCheckBox("Car0");
panel.add(checks[0]);
...

最新更新