【问题标题】:Java Panel Not DisplayingJava 面板不显示
【发布时间】:2013-11-05 04:19:30
【问题描述】:
public class Test extends JFrame
{
    private static final long serialVersionUID = 1L;

    public static void main(String [] args)
    {

        EventQueue.invokeLater(new Runnable()
        {
            public void run()
            {
               MyPanel p = new MyPanel();
               p.setVisible(true);
            }

       });
   }
}

Panel 代码决定了这个 MyPanel 的外观。

public class MyPanel extends JPanel 
{
private static final long serialVersionUID = 1L;
private JTextField txtUsername;

public MyPanel() 
{
    setLayout(null);

    JPanel panel = new JPanel();
    panel.setLayout(null);
    panel.setBorder(new EtchedBorder(EtchedBorder.LOWERED, null, null));
    panel.setBackground(SystemColor.control);
    panel.setBounds(0, 0, 500, 500);
    add(panel);

    ImageIcon icon= new ImageIcon("C:/Users/Admin/Desktop/testPic.jpg");
    JLabel wlabel = new JLabel(icon);
    wlabel.setBounds(20, 10, 400, 222);
    panel.add(wlabel);

    JPanel panel_1 = new JPanel();
    panel_1.setBounds(36, 244, 614, 159);
    panel.add(panel_1);
    panel_1.setLayout(null);

    JLabel lblUsername = new JLabel("Username:");
    lblUsername.setBounds(40, 40, 100, 20);
    panel_1.add(lblUsername);
    lblUsername.setFont(new Font("Tahoma", Font.PLAIN, 18));

    txtUsername = new JTextField();
    txtUsername.setBounds(179, 52, 195, 30);
    panel_1.add(txtUsername);
    txtUsername.setColumns(10);

    JButton btnSubmit = new JButton("SUBMIT");
    btnSubmit.setBounds(424, 65, 145, 44);
    panel_1.add(btnSubmit);
    btnSubmit.setFont(new Font("Tahoma", Font.PLAIN, 18));

    btnSubmit.addActionListener(new ActionListener() 
    {
        public void actionPerformed(ActionEvent arg0) 
        {
        }
    });
}
}

为什么我看不到实际的面板?代码编译并运行,但我在屏幕上看不到任何内容。

【问题讨论】:

    标签: java swing jpanel


    【解决方案1】:

    您必须将您的 JPanel 添加到您的 JFrame。 JFrame 是显示整个 GUI 的顶级窗口。如果没有直接创建(如上所述)或间接创建的顶级窗口(例如在创建 JOptionPane 时),则永远不会看到 JPanel。

    所以,而不是这样:

    public void run()
    {
       MyPanel p = new MyPanel();
       p.setVisible(true);
    }
    

    这样做:

    public void run()
    {
       Test test = new Test();
       test.setVisible(true);
    }
    

    然后在 Test 构造函数中创建您的 MyPanel,并通过调用 add(...) 将其添加到 Test。

    接下来我们将讨论为什么空布局和setBounds(...) 是一件非常糟糕的事情。

    主要教程链接:

    【讨论】:

    • @MikeJohn:我可能会尖酸刻薄地问你是否看过教程,但说真的,你只是在测试实例上调用add(...)。是的,请阅读教程。这就是他们的目的。
    • @MikeJohn:请查看我上面答案中的关键教程链接。
    • 你说得对,我刚开始扔代码,这是个坏主意。我会阅读链接,谢谢。还有一个问题;当你说“调用 add(...) 这是哪个 add ?
    • @MikeJohn 假设您有一个名为frameJFrame。然后你打电话给frame.add(panel);
    • 我有点假设 MikeJohn 会知道这一点,因为他正在扩展一个类。 (我个人认为使用extend/implements的每个人都应该知道如何使用接口和超类。另外,任何制作对象的人都应该知道如何使用this引用它。
    猜你喜欢
    • 2014-02-26
    • 1970-01-01
    • 1970-01-01
    • 2013-05-21
    • 2021-12-26
    • 1970-01-01
    • 1970-01-01
    • 2012-11-05
    • 1970-01-01
    相关资源
    最近更新 更多