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 に追加する必要があります。GUI 全体を表示する最上位のウィンドウは JFrame です。上で説明したように直接、または 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(...)ます。

setBounds(...)次に、null レイアウトが非常に悪いことである理由について説明します。

主なチュートリアル リンク:

于 2013-11-05T04:21:25.070 に答える