我遇到的问题是JPanel
没有设置大小。我不确定是否与我的JTab
或JFrame
有关。我正在使用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();
}
}
答案 0 :(得分:1)
或者至少有两个JPanel,
完全。
首先,您使用添加到选项卡式窗格的/usr/lib
创建主面板。
然后,您有第二个面板用于标签和文本字段(使用您想要的任何布局管理器)。然后将此面板添加到BorderLayout
。
然后将包含JTable的滚动窗格添加到主面板的BorderLayout.LINE_START
。
阅读Layout Manager上的教程。根据需要嵌套具有不同布局管理器的面板。
希望让JTable占据另一方的50%。
选择50%的随机数不是设计GUI的方法。如果框架变得更小/更大会发生什么。这个空间怎么了?设计布局时要考虑到灵活性,就像设计浏览器窗口一样。总是有固定的区域,其大小由添加的组件决定,并且有一个灵活的区域可以根据需要增长/缩小。