设置大小不会覆盖Java

时间:2017-09-30 01:21:24

标签: java swing gridbaglayout

我遇到的问题是JPanel没有设置大小。我不确定是否与我的JTabJFrame有关。我正在使用GridBagLayout布局管理。由于某种原因无法设置大小。

这是一个虚拟代码,遵循与原始源代码相同的逻辑:

FirstPanel.java

import javax.swing.*;
import java.awt.*;

public class FirstPanel extends JPanel {
    private JLabel label1 = new JLabel("Label 1");
    private JTextField textField1 = new JTextField();
    private GridBagConstraints c = new GridBagConstraints();

    public FirstPanel() {
        //Size is not overriding
        Dimension size = getPreferredSize();
        size.width = 100;
        setPreferredSize(size);
        setBorder(BorderFactory.createTitleBorder("Border Title");

        setLayout(new GridBagLayout());
        addComponents();
    }

    private void addComponents() {
        c.gridx = 0;
        c.gridy = 0;
        c.anchor = GridBagConstraints.NORTHWEST;
        c.insets = new Insets(5, 0, 0, 0);
        add(label1, c);

        c.gridx = 1;
        add(textField1, c);

        c.weightx = 1;
        c.weighty = 1;
        add(new JLabel(""), c);
    }
}

MainPanel.java

import javax.swing.*;
import java.awt.*;

public class MainPanel {
    private JFrame frame = new JFrame("App");
    private JPanel panel1 = new JPanel(new GridBagLayout());
    private GridBagConstraints c = new GridBagConstraints();
    private JTabbedPane tabPane = new JTabbedPane();

    public MainPanel() {
        addComponents();

        frame.add(tabPane);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(500, 350);
        frame.setVisible(true);
        frame.setLocationRelativeTo(null);
        frame.setResizable(false);
    }

    private void addComponents() {
        tabPane.addTab("Tab 1", new FirstPanel());
    }
}

Main.java

public class Main {
    public static void main(String[] args) {
        new MainPanel();
    }
}

1 个答案:

答案 0 :(得分:1)

  

或者至少有两个JPanel,

完全。

首先,您使用添加到选项卡式窗格的/usr/lib创建主面板。

然后,您有第二个面板用于标签和文本字段(使用您想要的任何布局管理器)。然后将此面板添加到BorderLayout

然后将包含JTable的滚动窗格添加到主面板的BorderLayout.LINE_START

阅读Layout Manager上的教程。根据需要嵌套具有不同布局管理器的面板。

  

希望让JTable占据另一方的50%。

选择50%的随机数不是设计GUI的方法。如果框架变得更小/更大会发生什么。这个空间怎么了?设计布局时要考虑到灵活性,就像设计浏览器窗口一样。总是有固定的区域,其大小由添加的组件决定,并且有一个灵活的区域可以根据需要增长/缩小。