【问题标题】:Gap between JPanelsJPanel 之间的差距
【发布时间】:2013-12-04 14:05:24
【问题描述】:

我的 JPanels 有问题。我有 1 个主面板(GridBagLayout),里面有 4 个面板。我不想再看到中间的这个 *** 间隙,wrr!当我在面板上同时使用填充时,它可以工作,但是有一个问题,左侧的更多面板无法水平调整大小。所以我设置了左侧填充垂直的那些面板,以及右侧填充的那些面板。它工作正常,因为左侧没有调整大小,但我仍然在中间有这个间隙,当我调整框架的大小时,这个间隙的大小会从小变大;/

屏幕:http://i44.tinypic.com/smr42a.png

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

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

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


    f.getContentPane().setLayout(new GridBagLayout());
    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.add(p0);
    f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
    f.pack();
    f.setVisible(true);
}

}

【问题讨论】:

  • 请添加导致此行为的代码。在没有看到您尝试过的情况下进行调试是不可能的。
  • 我正在使用 netbeans 设计模式,代码是 100 万行代码,没有提供任何内容。我刚刚尝试了许多布局管理器的变体,并使用了一些“胶水”、“支柱”,但我是无法将右面板粘贴到左面板并仅以东方式调整面板大小。我将尝试解释我想要实现的目标。我需要面板,它分为 4 个面板,如图所示。左面板应该有固定的大小(它是菜单)右面板是内容,所以它可以随时随地调整大小。

标签: java swing jpanel


【解决方案1】:

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

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,一切都会正常工作。我建议你阅读LayoutManager's

【讨论】:

  • 感谢帮助 :) 我发现只为这个青色面板修复问题添加了 gridBagConstraints.weightx = 50.0。我还到处都设置了填充和它的美丽:D
【解决方案2】:

将框架布局设置为“绝对”,然后您可以将选项卡式窗格一直移动到顶部,这样它就会与框架重叠,因此不再可见。如果您想在顶部放置一个面板,但又讨厌选项卡,您可以将选项卡式面板的布局设置为“绝对”,并在其上方放置一个面板,以隐藏选项卡。它对我有用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多