编程语言
首页 > 编程语言> > java-无法将JTextfield添加到JTabbedPane中的JPanel上

java-无法将JTextfield添加到JTabbedPane中的JPanel上

作者:互联网

我正在尝试使用Swing创建基本的UI.我想拥有一个带有多个选项卡的JTabbedPane的JFrame.如果我只使用JTextField制作1个JPanel,它就可以正常工作,但是,只要我想添加一个JTextField的另一个JPanel,它什么也不会显示.我在这里做错了什么?

这是一个简单的示例:

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,并且组件将填充框架的整个空间.

标签:swing,jtextfield,java
来源: https://codeday.me/bug/20191108/2007034.html