我的JPanel为什么不显示?

时间:2014-02-05 19:33:35

标签: java swing jframe jpanel

所以我只是检查,当我点击我的按钮时,它不会显示我的JPanel,任何想法为什么?

感谢。

我想要第三堂课展示,真的很感谢帮助 - 谢谢分配。

第一堂课 - JFrame课程。

import javax.swing.JFrame;

public class Frame {
    public static void main(String[] args ) {
        JFrame frame = new JFrame("JFrame Demo");
        Panel panel1 = new Panel();

        frame.add(panel1);


        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(400, 500);
        frame.setVisible(true);

    }
}

第二课 - 第1小组

import javax.swing.JPanel;
import java.awt.CardLayout;
import javax.swing.JButton;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;

public class Panel extends JPanel{
    public Panel() {
        setLayout(null);
        final Panel2 panel2 = new Panel2();


        JButton btnNewButton = new JButton("New button");
        btnNewButton.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {

                setVisible(false);
                panel2.setVisible(true);


            }
        });
        btnNewButton.setBounds(62, 197, 224, 122);
        add(btnNewButton);
    }
}

第三课 - 第2小组(我想要展示)

import javax.swing.JPanel;
import javax.swing.JLabel;
import java.awt.CardLayout;
import javax.swing.JTextField;


public class Panel2 extends JPanel {
    private JTextField textField;
    public Panel2() {

        setLayout(null);
        setVisible(true);
        textField = new JTextField();
        textField.setBounds(84, 84, 290, 77);
        add(textField);
        textField.setColumns(10);

    }
}

3 个答案:

答案 0 :(得分:2)

您永远不会将panel2添加到任何内容中。 JPanelJFrame不同,setVisible会让它神奇地出现。您需要将其添加到容器中。只需将其添加到Panel

即可
  • 同时避免使用null布局。学习使用Layout Managers

  • 另见Initial Threads。您想要从事件调度线程中运行您的swing应用程序,如此

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable(){
            public void run() {
                new Frame();
            }
        });
    }
    
  • 这看起来像是你可能试图按照CardLayout所取得的成果行事。有关基本用法,请参阅此example。另请参阅How to Use Card Layout

答案 1 :(得分:0)

在第二个类中,在构造函数的第二行之后,你试过吗?

 add(panel2);

看看是否有效。

答案 2 :(得分:-1)

将Panel.java修改为如下所示。告诉我这是否有利于您的需求:

import javax.swing.JPanel;
import javax.swing.JButton;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;

public class Panel extends JPanel{

    Panel2 panel2 = null;
    JButton btnNewButton = null;

    public Panel() {
         setLayout(null);
         panel2 = new Panel2();

         panel2.setBounds(5,5,300,500);
         add(panel2);
         showPanel2(false);

          btnNewButton = new JButton("New button");
          btnNewButton.setBounds(62, 197, 224, 122);
          add(btnNewButton);
          showButton(true);

          btnNewButton.addActionListener(new ActionListener() {
           public void actionPerformed(ActionEvent e) {

                showButton(false);
                showPanel2(true);


            }
         });

     }

     public void showPanel2(boolean bshow)
     {
         panel2.setVisible(bshow);
     }

     public void showButton(boolean bshow)
     {
          btnNewButton.setVisible(bshow);
     }

}