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

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

4

1 回答 1

2

您必须将您的 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 ,并通过调用将其添加到 Test 那里add(...)

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

主要教程链接:

于 2013-11-05T04:21:25.070 回答