当前位置: 首页 > 知识库问答 >
问题:

JPanel不允许定位组件

印高阳
2023-03-14

因此,我创建了2个jframes

但后来我意识到2jframes不是一个好主意,所以我添加了jtabbedpane,然后尝试以'jpanel的形式添加不同的选项卡。但是我不能像在jframe中那样定位组件,它看起来是这样的。

但我希望它是这样的

我怎么能这么做?

共有1个答案

董飞航
2023-03-14

如果没有一个工作示例,您似乎保留了JPanel的默认布局(它是一个FlowLayout)。

首先为每个视图创建一个自定义面板,这将使管理和将它们应用到JTabbedPane更加容易。

对于您的无意识布局问题,我推荐GridbagLayout,因为它的功能和灵活性...

import java.awt.EventQueue;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTabbedPane;
import javax.swing.JTextField;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;

public class Test {

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

    public Test() {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                try {
                    UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
                } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
                    ex.printStackTrace();
                }

                JFrame frame = new JFrame("Testing");
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

                JTabbedPane tp = new JTabbedPane();
                tp.add("Person", new JPanel());
                tp.add("Work Detail", new TestPane());

                frame.add(tp);
                frame.pack();
                frame.setLocationRelativeTo(null);
                frame.setVisible(true);
            }
        });
    }

    public class TestPane extends JPanel {

        private JTextField name;
        private JTextField serial;
        private JTextField id;
        private JTextField email;

        private JComboBox level;

        public TestPane() {
            setLayout(new GridBagLayout());
            GridBagConstraints gbc = new GridBagConstraints();
            gbc.gridx = 0;
            gbc.gridy = 0;
            gbc.anchor = GridBagConstraints.EAST;
            gbc.insets = new Insets(2, 2, 2, 2);

            add(new JLabel("Name"), gbc);
            gbc.gridx += 2;
            add(new JLabel("Sr No"), gbc);
            gbc.gridx = 0;
            gbc.gridy++;
            add(new JLabel("ID"), gbc);
            gbc.gridx += 2;
            add(new JLabel("Email ID"), gbc);

            name = new JTextField(10);
            serial = new JTextField(10);
            id = new JTextField(10);
            email = new JTextField(10);

            level = new JComboBox(new String[]{"Manager", "Eng Lead", "Eng Designer", "Jr Designer"});

            gbc.anchor = GridBagConstraints.WEST;
            gbc.gridx = 1;
            gbc.gridy = 0;
            add(name, gbc);
            gbc.gridx += 2;
            add(serial, gbc);
            gbc.gridx = 1;
            gbc.gridy++;
            add(id, gbc);
            gbc.gridx += 2;
            add(email, gbc);

            gbc.gridx = 0;
            gbc.gridy++;
            gbc.gridwidth = GridBagConstraints.REMAINDER;
            add(level, gbc);

            gbc.gridy++;
            gbc.anchor = GridBagConstraints.CENTER;
            add(new JButton("Save"), gbc);
        }

    }

}
 类似资料:
  • 我正在为我的Spring Boot应用程序配置OAuth2。我找到了一个解释它的链接https://gigsterous.github.io/engineering/2017/03/01/spring-boot-4.html. 这是我的OAuth2Config文件: 这是我的appUSerService文件: 但是我得到了这个错误:这一行有多个标记——这个位置不允许使用注释@限定符——注释类型限定

  • 问题内容: 我有一个,我想将用户的输入限制为纯数字或带小数的数字(最多2个小数位)。 基本上,我要输入价格。 我想避免做正则表达式。有办法吗? 问题答案: 代替允许使用小数位数的,而使用允许最多两位的小数。

  • 问题内容: 尝试使用中的注释时,Eclipse给了我这个错误。 我正在字段之前在带有注释的类中使用它。 以前,我在完全相同的地方使用过,很好。 我将 hibernate-core 从 4.1.9.Final 升级到 4.3.0.Beta3 并将 hibernate-commons- annotation 从 4.0.1 升级到 4.0.2 后,问题开始了。它说不推荐使用,建议使用它。 我发现的所有

  • 我已经编写了这个类以及EventListener注释和一个triggerMail方法—— 但是,在eclipse ide中,它给出了错误此位置不允许注释@EventListener和参数triggerMail的非法修饰符;只允许最终。 如何解决此问题?请帮助。

  • 我发现以下错误:对于我们使用的swagger2.2.0位置,不允许使用注释@ApiResponses 如果不升级swagger版本,我们还有什么选择吗?请帮助。。

  • 问题内容: 我看到以下错误: 使用此代码: 是什么原因引起的,如何解决? 问题答案: 在当前域之外发出ajax请求时,Javascript是受限制的。 例1:您的域名为example.com,并且您想向test.com提出请求=>您不能。 例2:您的域名是example.com,并且您想向inner.example.com发送请求,但是您不能。 例3:您的域名为example.com:80,并且您