Java JPanel之间的差距

Java JPanel之间的差距,java,swing,jpanel,Java,Swing,Jpanel,我对JPanels有问题。我有1个主面板(GridBagLayout),其中有4个面板。我不想再看到中间的这个缺口了,WRR!当我在两个面板上都使用“填充”时,效果很好,但有一个问题,左侧的多个面板无法水平调整大小。因此,我设置了左侧垂直填充的thoose面板,右侧垂直填充的thoose面板。它的工作很好,因为左边没有调整大小,但我仍然有这个差距在中间,当我调整大小的框架,这个差距变化大小从小到大;p> 屏幕: 编辑: 当所有面板都在某个Jpanel中时,你能修复它吗(我使用的是netbean

我对JPanels有问题。我有1个主面板(GridBagLayout),其中有4个面板。我不想再看到中间的这个缺口了,WRR!当我在两个面板上都使用“填充”时,效果很好,但有一个问题,左侧的多个面板无法水平调整大小。因此,我设置了左侧垂直填充的thoose面板,右侧垂直填充的thoose面板。它的工作很好,因为左边没有调整大小,但我仍然有这个差距在中间,当我调整大小的框架,这个差距变化大小从小到大;p> 屏幕:

编辑: 当所有面板都在某个Jpanel中时,你能修复它吗(我使用的是netbeans设计模式,它被迫添加主面板)


试试下一个例子。它没有任何间隙/插图:

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);
    }

}