我不明白为什么我的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();
}
}
答案 0 :(得分:0)
我建议同时显示JFrame
,因为它包含您的JPanel
。
将此作为main()
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
new TestGUI().setVisible(true);
}
});
}
答案 1 :(得分:0)
您的代码中存在一些问题。您没有正确设置布局。 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.invokeLater 或 EventQueue.invokeLater 生成JFrame,以便由事件调度线程<处理它/ strong>处理事件队列时自己的好时光。