繁体   English   中英

我的JPanel无法显示(Java)

[英]My JPanel won't show up (Java)

我不明白为什么我的JPanel无法显示,因为我使用了pack()和setVisible(true)。它只是运行应用程序而没有任何反应。 这是我的代码

import java.io.*;
import java.net.*;
import java.util.Scanner;
import java.util.concurrent.TimeUnit;

import javax.swing.*;

import java.awt.event.*;
import java.awt.*;

import javax.swing.JFrame;

public class TestGUI extends JFrame {

    private JPanel _panel1 = new JPanel();
    private JTextArea _txtarea = new JTextArea(10, 10);
    private JTextField _txtfield = new JTextField();

    public TestGUI() {
        add(_panel1);
        _panel1.setLayout(new BorderLayout());
        _panel1.add(_txtarea);
        _panel1.add(_txtfield);
        validate();
        _panel1.setVisible(true);
        _panel1.setSize(500, 500);
    }

    public static void main(String[] args) {
        new TestGUI();
    }
}

我建议也显示JFrame ,因为它包含您的JPanel

试试这个作为你的main()

public static void main(String[] args) {
  SwingUtilities.invokeLater(new Runnable() {
    public void run() {
      new TestGUI().setVisible(true);
    }
  });
}

您的代码中有几个问题。 您没有正确设置布局。 BorderLayout需要定位。

将组件添加到JFrame后,可以为其设置大小或调用pack()方法,以便JFrame假定适合子组件的大小。

这是一个示例:

class TestGUI extends JFrame {

        private JPanel _panel1 = new JPanel();
        private JTextArea _txtarea = new JTextArea(10, 10);
        private JTextField _txtfield = new JTextField();

        public TestGUI() {
            add(_panel1);
            _panel1.setLayout(new BorderLayout());

            // border layout is done by positioning like center, south north etc.
            _panel1.add(_txtarea, BorderLayout.CENTER);
            _panel1.add(_txtfield, BorderLayout.NORTH);

            // set the size before making it visible
            _panel1.setSize(500, 500);
            setVisible(true);

            // call pack() so that the Frame assumes the needed space only
            pack();

            // set a default close method so that your frame  exits on close.
           setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        }
    }

接下来,一个好的做法是通过SwingUtilities.invokeLaterEventQueue.invokeLater生成JFrame,以便在事件队列处理时由Event Dispatch Thread自行处理。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM