标签: gridbaglayout

SetVisible(false)更改我的Panel中组件的布局

当我将其中一个子面板设置为不可见时,如何使主面板中的子面板保持原样?

我看起来像:

[ (Panel1) (Panel2) (Panel3) (Panel4) ]
Run Code Online (Sandbox Code Playgroud)

当我这样做panel3.setVisible(false),然后看起来像:

[      (Panel1) (Panel2) (Panel4)     ]
Run Code Online (Sandbox Code Playgroud)

我希望它看起来像:

[ (Panel1) (Panel2)          (Panel4) ]
Run Code Online (Sandbox Code Playgroud)

我正在使用GridBagLayout,我的mainPanel声明如下所示:

final JPanel panel = new JPanel(new GridBagLayout());
GridBagConstraints c = new GridBagConstraints();
Run Code Online (Sandbox Code Playgroud)

我添加了一个新的面板,如:

final JTextField valueTextField = new JTextField();
valueTextField.setPreferredSize(new Dimension(80, 25));
valueTextField.setName("Value");
c.gridx =0;
panel.add(valueTextField, c);
Run Code Online (Sandbox Code Playgroud)

如果需要我会提供更多代码,我不关心我使用哪种布局,只要它能得到我想要的东西.

java swing jpanel gridbaglayout

6
推荐指数
1
解决办法
8478
查看次数

使用GridBagLayout对齐面板

我不是java的新手(我已经使用它一年了)但这是我第一次参加摇摆.我正在努力建立一个非常简单的聊天客户端,同时学习套接字和摆动.我的问题是"我该如何正确对齐我的面板?".我尝试了很多东西(虽然我的代码中没有它).通常我会独自完成这样的工作,但是我需要寻求帮助.我是否需要更换wieghtx,重量级?我希望客户看起来像这样.

在此输入图像描述

这就是它目前的样子.

在此输入图像描述

这是我的代码.

package com.client.core;

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


public class Window extends JFrame{

private int screenWidth = 800;
private int screenHeight = 600;

public Window(){

    //Initial Setup
    super("NAMEHERE - Chat Client Alpha v0.0.1");
    setResizable(true);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setSize(screenWidth,screenHeight);
    GridBagConstraints c = new GridBagConstraints();

    //Main Panel
    JPanel window = new JPanel();
    window.setLayout(new GridBagLayout());
    window.setBackground(Color.black);

    //Panels
    JPanel display = new JPanel();
    JPanel chat = new JPanel();
    chat.setLayout(new GridBagLayout());
    JPanel users = new JPanel();


    display.setBackground(Color.blue);
    c.gridx = 0;
    c.gridy = 0;
    c.insets= …
Run Code Online (Sandbox Code Playgroud)

java layout swing gridbaglayout

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

Java Swing:如何更改Grid布局中一行的大小,并允许它仅水平而不是垂直动态调整大小?

大家好,我有一个内部有三个组件的JFrame.

  1. 一份菜单
  2. 选项卡式窗格
  3. 一个有一些按钮的面板

最初我的目标是创建如下设计: 在此输入图像描述

当用户调整应用程序的大小时,一切都会调整大小.所以我想也许如果我使用简单的网格布局我的问题就会解决,所以我决定做以下事情:

  1. 选项卡式窗格中将包含一些面板,这些面板将遵循网格布局.

  2. 底部的面板将遵循网格布局.

  3. JFrame也将遵循网格布局.

结果:

在此输入图像描述

你可以看到这不是我想要的,按钮太大了,尽管应用程序调整得很好:

在此输入图像描述

按钮也会调整大小,但它们仍然太大.我希望能够为按钮设置一个小尺寸(更具体地说是它们所包含的面板),当用户调整应用程序大小时,按钮只会水平调整而不是垂直调整,这意味着只有选项卡式窗格会变得更大垂直.这可以实现吗?我搜索并发现了关于gridbaglayout,我开始玩了一点,但我没有做到任何事情.我设法做的就是以下内容:

在此输入图像描述

看起来不错,但是当我调整大小时,这就是我得到的:

在此输入图像描述

提前致谢.

java layout swing grid-layout gridbaglayout

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

调整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 中的间隙

我正在使用 GridBagLayout 创建一个名为“预设”的 JPanel,它在 JFrame 中被复制多次。每个预设都有多行(JPanels)。我的目标是只显示一行(第一行),但是当单击编辑按钮时,它们都会显示出来。现在,编辑按钮可以工作,但行之间有很大的空间。我希望当多余的线折叠时,每个预设将直接位于彼此上方(没有空格)。你可以在下图中看到我在说什么。

这是它的外观: 在此处输入图片说明

这就是我想要的样子: 在此处输入图片说明

我相当肯定我需要对 GridBag 做点什么,但我不知道是什么。我已经阅读了几个教程,并按照我认为应该的方式编写了它,但没有运气。


package SSCCE;

import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.GridLayout;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.IOException;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextField;

public class UI extends JFrame{
    private final static int HEIGHT = 600;
    private final static int WIDTH = 730;
    private JPanel pane; //Pane that stores accounts
    private JScrollPane scroller;
    private Preset[] …
Run Code Online (Sandbox Code Playgroud)

java user-interface swing jpanel gridbaglayout

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

仅使用GroupLayout设置面板的最大高度(不使用setMaximumSize)

我查看了所有其他答案,但他们都建议使用GroupLayout,BoxLayout或者将使用GridBagLayout的面板与另一个使用上述布局之一的面板进行包装.

我目前正在使用GridBagLayout,我想知道是否有办法设置面板的最大高度.我不希望限制宽度,只有高度,所以setMaximumSize(Dimension)不起作用.

GridBagLayout是否以任何方式支持此功能?对不起,如果我的问题不包含任何代码,我可能找到的唯一尝试是setMaximumSize(Dimension),或将其包装在另一个面板中(我希望避免)

java swing gridbaglayout grouplayout

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

GridBagLayout网格无法正常工作

我正在尝试创建以下GUI:

在此输入图像描述

但我制作的GUI是:

在此输入图像描述

我的网格是什么样的:

图像:这个网格

我不明白为什么我得到这个输出,因为我绘制了一个图表来帮助代码,它似乎工作.

addComp添加方法将输入组件添加到给定(x,y)位置和给定组件宽度和高度的输入面板.

码:

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

public class GUIError extends JFrame {

    //initialise all the components
    JPanel mainPanel = new JPanel();
    JTextField txtDisplay = new JTextField();
    JButton btnA = new JButton("A");
    JButton btnB = new JButton("B");
    JButton btnC = new JButton("C");
    JButton btnD = new JButton("D");
    JButton btnE = new JButton("E");
    JButton btnF = new JButton("F");
    JButton btnWA = new JButton("WA");
    JButton btnWB = new JButton("WB");
    JButton btnWC = new JButton("WC");
    JButton btnWD = …
Run Code Online (Sandbox Code Playgroud)

java layout swing layout-manager gridbaglayout

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

GridBagLayout 网格宽度无法按预期工作

我正在使用 java swing LayoutManager GridBagLayout,遇到了这个问题。我想要这样的布局

ACC
BB

但是得到这样的布局

ACC
B

尽管 B 的网格宽度为 2,其中 A 的网格宽度为 1,但 A 和 B 占用的列数相同。我认为 A、B 和 C 之间不会有一个非常小的列,因为 C 从第 1 列开始。问题如果 C 的 gridwidth 是 1 而不是 2,则不会发生。我对输出感到困惑。

为什么会发生这种情况/我该如何解决?

JFrame test = new JFrame();
test.setSize(800,800);
test.setLayout(new GridBagLayout());
test.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

GridBagConstraints c;

c = new GridBagConstraints();
c.gridx=0;
c.gridy=0;
c.fill = GridBagConstraints.BOTH;
c.weightx = 1;
c.weighty = 1;
test.add(new JButton("A"), c);

c = new GridBagConstraints();
c.gridx=0;
c.gridy=2;
c.gridwidth=2;
c.fill = GridBagConstraints.BOTH;
c.weightx = 1;
c.weighty …
Run Code Online (Sandbox Code Playgroud)

java swing gridbaglayout

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

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
查看次数

如何使用 GridBagLayout 在多列上拉伸组件?

我一直在学习 Java Swing 中的布局,目前正在制作一个简单的计算器。我将使用文本字段进行输入/输出,我想将其拉伸到 2 列(我总共使用了三列),但是当我尝试拉伸它时,它会调整第一列中项目的大小。这是代码和屏幕截图。

应用截图:

https://i.stack.imgur.com/fCACd.png

import java.awt.Font;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.GridLayout;
import java.awt.Insets;

import javax.swing.*;

public class Calculator extends JFrame{

    JButton but1, but2, but3, but4, but5, but6,
        but7, but8, but9, but0, butPlus, butMinus,
        clearAll;

    JTextField textResult;

    int num1, num2;

    public static void main(String[] args){
    
        new Calculator();
        
    }

    public Calculator(){
            
        this.setSize(400,400);
        this.setLocationRelativeTo(null);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setTitle("Calculator");
    
        JPanel thePanel = new JPanel();
    
        thePanel.setLayout(new GridBagLayout());
    
        GridBagConstraints gridConstraints = new GridBagConstraints();
    
        gridConstraints.gridx = 0;
        gridConstraints.gridy = 0;
        gridConstraints.gridwidth = 1;
        gridConstraints.gridheight = …
Run Code Online (Sandbox Code Playgroud)

java swing layout-manager gridbaglayout

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