标签: gridbaglayout

如何在Java中锁定gridLayout的宽高比?

是否有一种简单的方法可以锁定Java Swing中GridLayout组件的宽高比?或者应该在包含该布局的JPanel上完成?

java layout swing gridbaglayout

5
推荐指数
1
解决办法
2288
查看次数

调整Gridbag布局

我试图在java中使用GRIDBAG布局实现此布局

public static void addComponentsToPane(Container pane) {
        if (RIGHT_TO_LEFT) {
            pane.setComponentOrientation(ComponentOrientation.RIGHT_TO_LEFT);
        }

        JLabel label1,label2,label3,result,title;
        JButton calculate_btn;
        JTextField side1,side2,side3;

    pane.setLayout(new GridBagLayout());
    GridBagConstraints c = new GridBagConstraints();
    if (shouldFill) {
    //natural height, maximum width
    c.fill = GridBagConstraints.HORIZONTAL;
    }


        title = new JLabel("Area of Triangle");
    if (shouldWeightX) {
    c.weightx = 0.5;
    }
    c.fill = GridBagConstraints.HORIZONTAL;
    c.gridx = 2;
    c.gridy = -1;
    pane.add(title, c);



    label1 = new JLabel("Side 1: ");
    if (shouldWeightX) {
    c.weightx = 0.5;
    }
    c.fill = GridBagConstraints.HORIZONTAL;
         c.ipady = 20;
    c.gridx …
Run Code Online (Sandbox Code Playgroud)

java user-interface swing gridbaglayout

5
推荐指数
1
解决办法
396
查看次数

gridBagLayout vs absoluteLayout

我正在尝试为JAVA中的银行应用程序制作GUI.如果我在eclipse中使用WindowBuilder,那么使用我的框架的绝对布局很容易创建任何东西,但问题是我调整框架的大小.这就是为什么我选择使用gridBagLayout,我可以使用weightx/y来让我的工作更轻松.我有点忘了如何正确使用这个布局,所以我第一次尝试在gridBagLayout主面板中添加JPanel时遇到困难.

这是我想要实现的(绝对布局):

在此输入图像描述

这就是我所拥有的(在gridBagLayout中制作):

在此输入图像描述

如果有人可以在我第一次添加flowLayout面板时指出我需要更改/添加的内容,我将不胜感激.基本上是第一个细胞的白色空间 - 我想摆脱它并控制它!

这是一些代码:

    setBackground(new Color(255, 255, 255));
    GridBagLayout gridBagLayout = new GridBagLayout();
    gridBagLayout.columnWidths = new int[]{0, 0};
    gridBagLayout.rowHeights = new int[]{0, 0};
    gridBagLayout.columnWeights = new double[]{1.0, Double.MIN_VALUE};
    gridBagLayout.rowWeights = new double[]{1.0, Double.MIN_VALUE};
    setLayout(gridBagLayout);

    JPanel panel = new JPanel();
    FlowLayout flowLayout = (FlowLayout) panel.getLayout();
    flowLayout.setVgap(15);
    flowLayout.setHgap(15);
    flowLayout.setAlignment(FlowLayout.LEFT);
    panel.setBackground(new Color(51, 102, 204));
    GridBagConstraints gbc_panel = new GridBagConstraints();
    gbc_panel.anchor = GridBagConstraints.NORTH;
    gbc_panel.fill = GridBagConstraints.HORIZONTAL;
    gbc_panel.gridx = 0;
    gbc_panel.gridy = 0;
    add(panel, gbc_panel);

    JLabel label = new JLabel("European Bank");
    label.setForeground(Color.WHITE); …
Run Code Online (Sandbox Code Playgroud)

java user-interface swing gridbaglayout

5
推荐指数
1
解决办法
1023
查看次数

如何获取带有空JLabel的JPanel以占用GridBagLayout中的空间

我正在为学校的项目制作GUI.我正在使用GridBagLayout.

我希望有一个标签指示输入(文件类型@ x = 0,y = 0),然后是另一个标签(实际文件名一旦选择@ x = 1, y = 0),然后是文件选择器的浏览按钮(@ x = 2, y = 0) .标签at (1,0)最初是空白的,但是当标签不包含文本时,我希望文本占据的区域占用一些空间.我还希望标签at (0,0)和按钮之间的空间(2,0)保持不变.

为了实现这一点,我试图将标签放在面板上,然后使用布局.但是我无法缝合以达到预期的效果.有人可以提供一些建议吗?GridBagLayout的下三行将以完全相同的方式布局.

这是GUI的屏幕截图的链接.

图片

    calibrationFileSelectionValueLabel = new JLabel("",Label.LEFT);
    calibrationFileSelectionValueLabel.setName("calibrationFileSelection");
    calibrationFileSelectionValueLabel.setMinimumSize(new Dimension(100,0));



    calibrationFileSelectionValuePanel = new JPanel();
    calibrationFileSelectionValuePanel.setBorder(BorderFactory.createEtchedBorder());
    calibrationFileSelectionValuePanel.add(calibrationFileSelectionValueLabel);

    c.gridx = 0;
    c.gridy = 0;
    c.fill = GridBagConstraints.NONE;

    filesPanel.add(calibrationFileLabel,c);

    c.gridy = 1;
    filesPanel.add(frequencyFileLabel,c);

    c.gridy = 2;
    filesPanel.add(sampleFileLabel,c);

    c.gridy = 3;
    filesPanel.add(outputFileLabel,c);

    c.gridx = 1;
    c.gridy = 0;
    c.fill = GridBagConstraints.BOTH;

   // filesPanel.add(calibrationFileSelection,c);
    filesPanel.add(calibrationFileSelectionValuePanel,c);

    c.gridy = 1; …
Run Code Online (Sandbox Code Playgroud)

java swing gridbaglayout

5
推荐指数
2
解决办法
1万
查看次数

GridBagLayout是否需要空单元格的占位符面板?

我做了一个简单的操作GridBagLayout,在单元格(0,0),(1,0)和(0,1)中添加了按钮.

JPanel panelMain = new JPanel(new GridBagLayout());
GridBagConstraints c = new GridBagConstraints();
    c.gridx = 0;
    c.gridy = 0;
    panelMain.add(new JButton("0,0"),c);

    c.gridx = 1;
    c.gridy = 0;
    panelMain.add(new JButton("1,0"),c);

    c.gridx = 0;
    c.gridy = 1;
    panelMain.add(new JButton("0,1"),c);
Run Code Online (Sandbox Code Playgroud)

我很高兴看到由此产生的UI:

期望的结果

我想JButton在一个未连接到现有单元格的单元格中添加一个.我希望它被一个空的空间分开.当我尝试这个时,新的东西JButton被压在其他的旁边.这是补充:

JPanel panelMain = new JPanel(new GridBagLayout());
GridBagConstraints c = new GridBagConstraints();
    c.gridx = 0;
    c.gridy = 0;
    panelMain.add(new JButton("0,0"),c);

    c.gridx = 1;
    c.gridy = 0;
    panelMain.add(new JButton("1,0"),c);

    c.gridx = 0;
    c.gridy = 1;
    panelMain.add(new JButton("0,1"),c);

    c.gridx …
Run Code Online (Sandbox Code Playgroud)

java swing gridbaglayout

5
推荐指数
1
解决办法
261
查看次数

java网格包布局:避免中心对齐

在我的GUI应用程序中,我有几个JPanel,它们在我的程序运行期间的各个点被实例化,并且某些操作将导致其中一个显示在滚动窗格中:

mViewport.setViewportView(currentPanel);
Run Code Online (Sandbox Code Playgroud)

问题是,我的面板是使用Grid Bag Layouts完成的,其行为是将其自身置于其内部的JScrollPane中.这使得GUI看起来很奇怪.

有人知道强制网格包布局面板左上角对齐的方法吗?

谢谢!


编辑

请注意,我在这里询问整个面板在其滚动窗格内的对齐情况,而不是面板内的组件.

java alignment jpanel jscrollpane gridbaglayout

4
推荐指数
2
解决办法
8143
查看次数

将宽度固定为GridBagLayout

在此输入图像描述

我正在使用GridBagLayout创建一个看起来像图片中的StatusBar.我有4个区域,所以我在第一个区域有一个按钮,然后在第二个区域有信息消息,然后我又想要两个(我还有第五个用于制作角落).

按钮区域非常适合,因为内容始终是具有相同宽度的按钮.与角落区域相同.信息区域必须获得所有可用空间.第3和第4个区域必须具有固定值,与屏幕大小无关.

我怎样才能做到这一点?

我目前的代码是:

public MyStatusBar() {
        setLayout(new GridBagLayout());
        setPreferredSize(new Dimension(getWidth(), 23));
        GridBagConstraints c = new GridBagConstraints();

        botonDispositivo = new JButton("");
        this.setText(0, "Disconnected");
        URL imageUrl = getClass().getResource("resources/22x22/dispositivo01.png");
        this.setButtonImg(imageUrl);
        this.setButtonEnabled(false);


        c.gridx = 0;
        c.gridy = 0;
        c.fill = GridBagConstraints.BOTH;
        c.anchor = GridBagConstraints.WEST;
        c.gridwidth = 1;
        c.gridheight = 1;
        this.add(botonDispositivo, c);

        c.insets= new Insets(0,10,0,0);
        c.gridx ++;
        c.gridy = 0;
        c.weightx = 0.7;
        c.fill = GridBagConstraints.HORIZONTAL;
        msgLabel = new JLabel("");
        msgLabel.setPreferredSize(new Dimension(500, msgLabel.getHeight()));
        this.add(msgLabel, c);
        this.setText(1, "Waiting for potentiostat conection");

        c.gridx ++;
        c.gridy …
Run Code Online (Sandbox Code Playgroud)

java swing layout-manager gridbaglayout

4
推荐指数
2
解决办法
2万
查看次数

Java GridBagLayout自动构建

我使用GridBagLayout和GridBagConstraints设计了一个GUI.它包含可变数量的行,每行包含一些可能的列布局.为了测试代码,我构建了具有不同颜色的面板GUI,用于说明每行和每列中所有单元格的位置和大小调整行为.这个测试GUI工作正常,但现在我需要自动化它的构造.具体来说,我需要将行作为三种不同类型之一.如果您运行下面的代码并查看生成的GUI,您可以看到row1是一种类型,行2,6和7是另一种类型,而行3,4和5是第三种类型.我需要将这三种类型的行中的每一行封装在自己的类中.更重要的是,我需要我的代码能够创建第三种类型的可变数量的行(在示例中由行3,4和5说明).(这是用于数据分析软件.面板将加载数据视图和工具来操纵数据视图.)

当我尝试将行封装到自己的类中时,GUI看起来应该看起来不应该看起来.下面的测试代码以它应该看起来的方式生成GUI布局.任何人都可以告诉我如何更改此代码,以便它具有上面第一段中描述的功能?

您可以将我的测试代码粘贴到您的IDE中,以使其立即运行.测试代码分为两个单独的文件,如下所示:

GridBagLayoutDemo.java的代码是:

import java.awt.*;
import javax.swing.JFrame;

public class GridBagLayoutDemo {
    final static boolean RIGHT_TO_LEFT = false;

    public static void addComponentsToPane(Container pane) {
        if (RIGHT_TO_LEFT) {pane.setComponentOrientation(ComponentOrientation.RIGHT_TO_LEFT);}
        pane.setLayout(new GridBagLayout());

// top row (fill, gridx, gridy, gridwidth 1, weightx 0, weighty 0, ipady 0)
        TestPanel panelr1c1 = new TestPanel(Color.black);
        GridBagConstraints constraint_r1c1 = getGridBagConstraints(GridBagConstraints.NONE,0,0,1,0,0,0);
        pane.add(panelr1c1,constraint_r1c1);

        TestPanel panelr1c2 = new TestPanel(Color.blue);
        GridBagConstraints constraint_r1c2 = getGridBagConstraints(GridBagConstraints.HORIZONTAL,1,0,1,0.8,0,0);
        pane.add(panelr1c2,constraint_r1c2);

        TestPanel panelr1c2a = new TestPanel(Color.green);
        GridBagConstraints constraint_r1c2a = getGridBagConstraints(GridBagConstraints.HORIZONTAL,2,0,1,0.8,0,0);
        pane.add(panelr1c2a,constraint_r1c2a);

        TestPanel panelr1c3 = new TestPanel(Color.red);
        GridBagConstraints constraint_r1c3 …
Run Code Online (Sandbox Code Playgroud)

java layout user-interface swing gridbaglayout

4
推荐指数
1
解决办法
1606
查看次数

GridBagLayout中的JComboBox宽度问题

当我将JComboBox放入带有GridBagLayout的JPanel时,我发现最长的JComboBox项目不会完全显示,而是显示部分带有'...'

例如,它显示'医疗成分'的'医疗保健成分'.

请看这里的截图:

JComboBox宽度问题

代码是这样的:

JPanel infoPanel = JPanel(new GridBagLayout());            
dataTypeCB = new JComboBox(dataTypeList.toArray());
infoPanel.add(dataTypeCB, new GridBagConstraints(1, 1, 1, 1, 1, 0, GridBagConstraints.NORTHWEST, GridBagConstraints.NONE, new Insets(5,5,5,5), 0, 0));
Run Code Online (Sandbox Code Playgroud)

我已经找到了两个解决方案:

  1. 覆盖JComboBox的getPreferenceSize,但有点烦人.
  2. 使用JPanel包装JComboBox,如下所示,但是经过扭曲的JPanel会引入一些意图并导致对齐问题,但仍然不完美:

第二个解决方案代码:

dataTypeCB = new JComboBox(dataTypeList.toArray());
JPanel dataTypeCBPanel = new JPanel();//make item can be fully show up.
dataTypeCBPanel.add(dataTypeCB, BorderLayout.CENTER);
infoPanel.add(dataTypeCBPanel, new GridBagConstraints(1, 1, 1, 1, 1, 0, GridBagConstraints.NORTHWEST, GridBagConstraints.NONE, new Insets(5,5,5,5), 0, 0));
Run Code Online (Sandbox Code Playgroud)

我的问题是:还有其他简单方法可以解决这个问题吗?

环境:Windows 7与JDK 1.6_25(64位版本)

非常感谢

java swing jcombobox gridbaglayout

4
推荐指数
1
解决办法
1535
查看次数

我怎样才能在Java中实现这种可扩展的布局?灵活的BoxLayout等

我希望能够有三个JPanels p1 p2和p3,并让它们像这样布局:

布局
我一直在玩FlowLayout,BoxLayout等,但我不确定我是否朝着正确的方向前进.我是Java的新手,所以如果我很诚实,我不知道该怎么办.

我喜欢BoxLayout如何工作,调整面板的大小,但我希望能够给它一些宽度属性.

我没有使用视觉设计师,这是我目前的窗口代码:

private void initialize() {
    Dimension dimensions = Toolkit.getDefaultToolkit().getScreenSize();

    frame = new JFrame();
    frame.setLayout(new GridLayout(1, 3));
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setBounds(dimensions.width / 2 - WINDOW_WIDTH / 2,
            dimensions.height / 2 - WINDOW_HEIGHT / 2, 
            WINDOW_WIDTH, WINDOW_HEIGHT);

    JPanel p1 = new JPanel(new BorderLayout());
    p1.setBackground(Color.red);

    JPanel p2 = new JPanel(new BorderLayout());
    p2.setBackground(Color.black);  

    JPanel p3 = new JPanel(new BorderLayout());
    p3.setBackground(Color.blue);       

    frame.add(p2);

    frame.add(p1);  
    frame.add(p3);
}
Run Code Online (Sandbox Code Playgroud)

任何指针赞赏!

编辑:感谢mKorbel,我已经设法让它按照我想要的方式工作.正确的列没有完全像我要做的那样布局,但实际上我改变了主意并决定保留其他布局.

PanelWindow
代码:

import java.awt.*;
import javax.swing.*;

public class PanelWindow extends JFrame {

    private static final long …
Run Code Online (Sandbox Code Playgroud)

java swing layout-manager gridbaglayout boxlayout

4
推荐指数
1
解决办法
1947
查看次数