对不起,另一个“我的代码在这里有什么问题”的问题,但我一直在与这个GridBagOfHurtLayout战斗,我不明白什么可能发生。GridBagLayout对齐列它不应该
我希望做一个UI,像这样的布局:
的画图程序崩溃和所有我得到的是一个缩小的屏幕截图,遗憾的颗粒感。所以我看到它的方式,我想要一个带有4列的GridBagLayout,每个顶部的两个窗格跨越2列,文本字段和大窗格跨越3,搜索按钮和左下方的窗格跨越1(水平)。这是我的代码:
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setPreferredSize(new Dimension(1080, 720));
this.setLayout(new GridBagLayout());
GridBagConstraints constraints;
projectLabel = new JLabel("Projects");
constraints = new GridBagConstraints();
constraints.fill = GridBagConstraints.NONE;
constraints.anchor = GridBagConstraints.LINE_START;
constraints.gridx = 0;
constraints.gridy = 0;
constraints.gridwidth = 2;
constraints.weightx = 0.25;
constraints.weighty = 0;
constraints.insets = new Insets(4,4,4,4);
this.add(projectLabel);
projectScrollPane = new JScrollPane();
constraints = new GridBagConstraints();
constraints.fill = GridBagConstraints.BOTH;
constraints.gridx = 0;
constraints.gridy = 1;
constraints.gridwidth = 2;
constraints.weightx = 1.0;
constraints.weighty = 0.5;
constraints.insets = new Insets(4,4,4,4);
projectScrollPane.setPreferredSize(new Dimension(540, 240));
this.add(projectScrollPane,constraints);
fieldLabel = new JLabel("Fields");
constraints = new GridBagConstraints();
constraints.fill = GridBagConstraints.NONE;
constraints.anchor = GridBagConstraints.LINE_START;
constraints.gridx = 2;
constraints.gridy = 0;
constraints.gridwidth = 2;
constraints.weightx = 1.0;
constraints.weighty = 0;
constraints.insets = new Insets(4,4,4,4);
this.add(fieldLabel);
fieldScrollPane = new JScrollPane();
constraints = new GridBagConstraints();
constraints.fill = GridBagConstraints.BOTH;
constraints.gridx = 2;
constraints.gridy = 1;
constraints.gridwidth = 2;
constraints.weightx = 1.0;
constraints.weighty = 0.5;
constraints.insets = new Insets(4,4,4,4);
fieldScrollPane.setPreferredSize(new Dimension(540, 240));
this.add(fieldScrollPane,constraints);
searchTextField = new JTextField();
constraints = new GridBagConstraints();
constraints.fill = GridBagConstraints.HORIZONTAL;
constraints.gridx = 0;
constraints.gridy = 2;
constraints.gridwidth = 3;
constraints.weightx = 2.0;
constraints.weighty = 0.0;
constraints.insets = new Insets(4,4,4,4);
searchTextField.setPreferredSize(new Dimension(1000,30));
this.add(searchTextField,constraints);
searchButton = new JButton("Search");
constraints = new GridBagConstraints();
constraints.fill = GridBagConstraints.NONE;
constraints.gridx = 3;
constraints.gridy = 2;
constraints.weightx = 0.0;
constraints.weighty = 0.0;
constraints.insets = new Insets(4,4,4,4);
searchButton.setSize(new Dimension(80,30));
this.add(searchButton,constraints);
imageScrollPane = new JScrollPane();
constraints = new GridBagConstraints();
constraints.fill = GridBagConstraints.BOTH;
constraints.gridx = 0;
constraints.gridy = 3;
constraints.weightx = 0.25;
constraints.weighty = 1.0;
constraints.insets = new Insets(4,4,4,4);
imageScrollPane.setPreferredSize(new Dimension(360,810));
this.add(imageScrollPane,constraints);
imagePane = new JEditorPane();
constraints = new GridBagConstraints();
constraints.fill = GridBagConstraints.BOTH;
constraints.gridx = 1;
constraints.gridy = 3;
constraints.gridwidth = 3;
constraints.weightx = 1.0;
constraints.weighty = 1.0;
constraints.insets = new Insets(4,4,4,4);
imagePane.setPreferredSize(new Dimension(720,810));
this.add(imagePane,constraints);
this.pack();
标签不在原始布局中。每个ScrollPanes最终都会包含一个JList,但现在我只是试图让空白的布局看起来不错,而不是。我目前得到的是这个。
文本字段不能被说服占用3列,也许第一滚动窗格占用3.我试图改变它的每一个方式,我能想到的,但什么也没有帮助。我可能会放弃这一点,并使用BoxLayout进行嵌套面板,但我想知道为什么这不起作用,因为我认为我做的都是正确的。任何见解?提前致谢。
谢谢,这解决了这个问题。我无法让Project JLabels工作(代码中有一个错字,顺便说一下,它们不应该是相同的)。我最终把他们带走了,因为他们大多在那里试图去做那些看不见的标签。我也最终取消了他们的插页,并且我将第3栏的重量改为0.45,因为Search JButton是不平衡的东西。总之,不可见的行列固定列和所有其他权重约束是不需要的。我不明白为什么这些项目标签是用来填满单元格的,但他们已经不在了。谢谢! – krs013