簡體   English   中英

按下按鈕后java在jframe中不顯示jpanel

[英]java not displaying jpanel in jframe after button press

我只是在制作一個用戶界面,按下按鈕后我想要它做的就是顯示謝謝...我對此很陌生,但是從我看來沒有錯誤嗎? 我嘗試過在可見的情況下玩耍,但無濟於事...任何幫助都非常感謝

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);
        }
    }
});

然后,您需要將ActionListener移到contentPane聲明下方,並將其設置為final

另外,您應該考慮將不同的復選框放入不同的變量,以便可以讀取它們的狀態。 如果不想掛那么多變量,可以將它們放入數組中。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM