无法将 JTextfield 添加到 JTabbedPane 中的 JPanel
Cant add JTextfield onto JPanel in JTabbedPane
我正在尝试使用 Swing 制作一个基本的 UI。我想要一个 JFrame
和一个带有多个选项卡的 JTabbedPane
。如果我只用 JTextField
制作 1 JPanel
它工作正常,但是一旦我想添加另一个 JPanel
和 JTextField
它就什么都不显示了。我在这里做错了什么?
这是一个简单的例子:
import java.awt.GridLayout;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTabbedPane;
import javax.swing.JTextField;
public class SwingUI {
private final JFrame frame;
private final JTabbedPane tabbedPane;
public SwingUI(){
frame = new JFrame("Test");
frame.setSize(1000, 1000);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().setLayout(new GridLayout(1, 1));
tabbedPane = new JTabbedPane();
tabbedPane.addTab("Login", makeLoginPanel());
tabbedPane.addTab("Login2", makeLoginPanel()); //if this is left out it works
frame.getContentPane().add(tabbedPane);
}
private JPanel makeLoginPanel(){
JPanel p = new JPanel();
p.setLayout(null);
JLabel lblName = new JLabel("Name:");
lblName.setBounds(50,50,100,30);
p.add(lblName);
JTextField x = new JTextField("text");
x.setBounds(200,200,200,200);
p.add(x);
return p;
}
}
框架应该在组件添加到框架后可见。
所以:
frame.setVisible( true );
应该是构造函数中的最后一个语句。
另外:
frame.setSize(1000, 1000);
不要硬编码大小。你不知道其他人可能使用的是什么分辨率。
改为使用:
frame.setExtendedState(JFrame.MAXIMIZED_BOTH);
框架将在您的屏幕上最大化打开。
此外,
frame.getContentPane().setLayout(new GridLayout(1, 1));
不要使用 GridLayout。默认布局是 BorderLayout,默认情况下它允许您将组件添加到 CENTER,并且该组件将填充整个 space 框架。
我正在尝试使用 Swing 制作一个基本的 UI。我想要一个 JFrame
和一个带有多个选项卡的 JTabbedPane
。如果我只用 JTextField
制作 1 JPanel
它工作正常,但是一旦我想添加另一个 JPanel
和 JTextField
它就什么都不显示了。我在这里做错了什么?
这是一个简单的例子:
import java.awt.GridLayout;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTabbedPane;
import javax.swing.JTextField;
public class SwingUI {
private final JFrame frame;
private final JTabbedPane tabbedPane;
public SwingUI(){
frame = new JFrame("Test");
frame.setSize(1000, 1000);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().setLayout(new GridLayout(1, 1));
tabbedPane = new JTabbedPane();
tabbedPane.addTab("Login", makeLoginPanel());
tabbedPane.addTab("Login2", makeLoginPanel()); //if this is left out it works
frame.getContentPane().add(tabbedPane);
}
private JPanel makeLoginPanel(){
JPanel p = new JPanel();
p.setLayout(null);
JLabel lblName = new JLabel("Name:");
lblName.setBounds(50,50,100,30);
p.add(lblName);
JTextField x = new JTextField("text");
x.setBounds(200,200,200,200);
p.add(x);
return p;
}
}
框架应该在组件添加到框架后可见。
所以:
frame.setVisible( true );
应该是构造函数中的最后一个语句。
另外:
frame.setSize(1000, 1000);
不要硬编码大小。你不知道其他人可能使用的是什么分辨率。
改为使用:
frame.setExtendedState(JFrame.MAXIMIZED_BOTH);
框架将在您的屏幕上最大化打开。
此外,
frame.getContentPane().setLayout(new GridLayout(1, 1));
不要使用 GridLayout。默认布局是 BorderLayout,默认情况下它允许您将组件添加到 CENTER,并且该组件将填充整个 space 框架。