Java JPanel之间的差距
我对JPanels有问题。我有1个主面板(GridBagLayout),其中有4个面板。我不想再看到中间的这个缺口了,WRR!当我在两个面板上都使用“填充”时,效果很好,但有一个问题,左侧的多个面板无法水平调整大小。因此,我设置了左侧垂直填充的thoose面板,右侧垂直填充的thoose面板。它的工作很好,因为左边没有调整大小,但我仍然有这个差距在中间,当我调整大小的框架,这个差距变化大小从小到大;p> 屏幕: 编辑: 当所有面板都在某个Jpanel中时,你能修复它吗(我使用的是netbeans设计模式,它被迫添加主面板)Java JPanel之间的差距,java,swing,jpanel,Java,Swing,Jpanel,我对JPanels有问题。我有1个主面板(GridBagLayout),其中有4个面板。我不想再看到中间的这个缺口了,WRR!当我在两个面板上都使用“填充”时,效果很好,但有一个问题,左侧的多个面板无法水平调整大小。因此,我设置了左侧垂直填充的thoose面板,右侧垂直填充的thoose面板。它的工作很好,因为左边没有调整大小,但我仍然有这个差距在中间,当我调整大小的框架,这个差距变化大小从小到大;p> 屏幕: 编辑: 当所有面板都在某个Jpanel中时,你能修复它吗(我使用的是netbean
试试下一个例子。它没有任何间隙/插图:
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import javax.swing.BorderFactory;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class Example extends JFrame {
public static void main(String[] args) {
final JFrame f = new JFrame();
JPanel p0 = new JPanel(new GridBagLayout());
JPanel p1 = new JPanel();
JPanel p2 = new JPanel();
JPanel p3 = new JPanel();
JPanel p4 = new JPanel();
p1.setBorder(BorderFactory.createTitledBorder("panel 1"));
p2.setBorder(BorderFactory.createTitledBorder("panel 2"));
p3.setBorder(BorderFactory.createTitledBorder("panel 3"));
p4.setBorder(BorderFactory.createTitledBorder("panel 4"));
p1.setBackground(Color.RED);
p2.setBackground(Color.GREEN);
p3.setBackground(Color.BLUE);
p4.setBackground(Color.CYAN);
GridBagConstraints c = new GridBagConstraints();
c.gridx = 0;
c.gridy = 0;
c.ipadx = 50;
p0.add(p1, c);
c.gridy = 1;
c.fill = GridBagConstraints.VERTICAL;
c.weighty = 1;
p0.add(p2, c);
c.gridx = 1;
c.gridy = 0;
c.ipadx = 0;
c.fill = GridBagConstraints.HORIZONTAL;
c.weighty = 0;
c.weightx = 1;
p0.add(p3, c);
c.fill = GridBagConstraints.BOTH;
c.weighty = 1;
c.gridy = 1;
p0.add(p4, c);
f.getContentPane().add(p0,BorderLayout.CENTER);
f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
f.pack();
f.setVisible(true);
}
}
它看起来像:
panel1
具有固定大小
panel2
仅垂直调整大小
panel3
仅水平调整大小
panel4
垂直和水平调整大小
编辑:不要将
LayoutManager
设置为contentPane,使用默认设置(BorderLayout
)。同时将GridBagLaout
设置为您的p0
,所有操作都将正常工作。我建议您阅读。将框架布局设置为“绝对”,然后您可以将选项卡式窗格一直移动到顶部,这样,它与框架重叠,因此无法再看到。如果你想在顶部放置一个面板,但又讨厌选项卡,你可以将选项卡式面板的布局设置为“绝对”,并在其上方放置一个面板,以隐藏选项卡。它适合我。请添加导致此行为的代码。在没有看到您尝试过的内容的情况下进行调试是不可能的。我使用的是netbeans设计模式,代码是1mn行代码,没有给出任何东西。我刚刚尝试了布局管理器的许多变体,并使用了一些“胶水”、“支柱”,但我无法将右面板粘到左面板上,并且只能以east way调整面板大小。我会尽力解释我想要实现的目标。我需要分为4个面板的面板,如图所示。左边的面板应该有恒定的大小(它是菜单)右边的面板是内容,所以它可以随时随地调整大小。Thx的帮助:)我发现只添加gridBagConstraints.weightx=50.0就可以解决这个青色面板的问题。我还设置了无处不在的填充和它的美好:D
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import javax.swing.BorderFactory;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class Example extends JFrame {
public static void main(String[] args) {
final JFrame f = new JFrame();
JPanel p0 = new JPanel(new GridBagLayout());
JPanel p1 = new JPanel();
JPanel p2 = new JPanel();
JPanel p3 = new JPanel();
JPanel p4 = new JPanel();
p1.setBorder(BorderFactory.createTitledBorder("panel 1"));
p2.setBorder(BorderFactory.createTitledBorder("panel 2"));
p3.setBorder(BorderFactory.createTitledBorder("panel 3"));
p4.setBorder(BorderFactory.createTitledBorder("panel 4"));
p1.setBackground(Color.RED);
p2.setBackground(Color.GREEN);
p3.setBackground(Color.BLUE);
p4.setBackground(Color.CYAN);
GridBagConstraints c = new GridBagConstraints();
c.gridx = 0;
c.gridy = 0;
c.ipadx = 50;
p0.add(p1, c);
c.gridy = 1;
c.fill = GridBagConstraints.VERTICAL;
c.weighty = 1;
p0.add(p2, c);
c.gridx = 1;
c.gridy = 0;
c.ipadx = 0;
c.fill = GridBagConstraints.HORIZONTAL;
c.weighty = 0;
c.weightx = 1;
p0.add(p3, c);
c.fill = GridBagConstraints.BOTH;
c.weighty = 1;
c.gridy = 1;
p0.add(p4, c);
f.getContentPane().add(p0,BorderLayout.CENTER);
f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
f.pack();
f.setVisible(true);
}
}