当我将其中一个子面板设置为不可见时,如何使主面板中的子面板保持原样?
我看起来像:
[ (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的新手(我已经使用它一年了)但这是我第一次参加摇摆.我正在努力建立一个非常简单的聊天客户端,同时学习套接字和摆动.我的问题是"我该如何正确对齐我的面板?".我尝试了很多东西(虽然我的代码中没有它).通常我会独自完成这样的工作,但是我需要寻求帮助.我是否需要更换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) 大家好,我有一个内部有三个组件的JFrame.
最初我的目标是创建如下设计:

当用户调整应用程序的大小时,一切都会调整大小.所以我想也许如果我使用简单的网格布局我的问题就会解决,所以我决定做以下事情:
选项卡式窗格中将包含一些面板,这些面板将遵循网格布局.
底部的面板将遵循网格布局.
JFrame也将遵循网格布局.
结果:

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

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

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

提前致谢.
我试图在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) 我正在使用 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) 我查看了所有其他答案,但他们都建议使用GroupLayout,BoxLayout或者将使用GridBagLayout的面板与另一个使用上述布局之一的面板进行包装.
我目前正在使用GridBagLayout,我想知道是否有办法设置面板的最大高度.我不希望限制宽度,只有高度,所以setMaximumSize(Dimension)不起作用.
GridBagLayout是否以任何方式支持此功能?对不起,如果我的问题不包含任何代码,我可能找到的唯一尝试是setMaximumSize(Dimension),或将其包装在另一个面板中(我希望避免)
我正在尝试创建以下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 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) 我做了一个简单的操作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 中的布局,目前正在制作一个简单的计算器。我将使用文本字段进行输入/输出,我想将其拉伸到 2 列(我总共使用了三列),但是当我尝试拉伸它时,它会调整第一列中项目的大小。这是代码和屏幕截图。
应用截图:
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)