gpt4 book ai didi

java - 使用垂直和水平粘合的 BoxLayout

转载 作者:行者123 更新时间:2023-11-30 06:28:05 24 4
gpt4 key购买 nike

下面是我从Creating two buttons at bottom left/right corner获得的代码我已经包括了我的尝试,(添加 jpanel2)

import java.awt.BorderLayout;

import javax.swing.Box;
import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;

public class ButtonsLeftAndRight {
private JFrame frame;
private JPanel pane;
private JButton button1;
private JButton button2;

public static void main(String[] args) {
SwingUtilities.invokeLater(new ButtonsLeftAndRight()::createAndShowGui);
}

public void createAndShowGui() {
frame = new JFrame(getClass().getSimpleName());

pane = new JPanel();
pane.setLayout(new BoxLayout(pane, BoxLayout.LINE_AXIS));

button1 = new JButton("Button1");
button2 = new JButton("Button2");

pane.add(button1);
pane.add(Box.createHorizontalGlue());
pane.add(button2);

frame.add(pane, BorderLayout.SOUTH);
JButton b1 = new JButton ("A");
JButton b2 = new JButton ("B");
JButton b3 = new JButton ("C");
JPanel panel2 = new JPanel();
panel2.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS));
panel2.add(b1);
panel2.add(Box.createVerticalGlue());
panel2.add(b2);
panel2.add(Box.createVerticalGlue());
panel2.add(b3);
frame.add(panel2, BorderLayout.CENTER);
frame.setSize(500, 500);
frame.setVisible(true);
frame.pack();
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}

问题是 BoxLayout 无法共享,但我需要以某种方式做到这一点,以便我可以获得垂直框

我正在尝试创建 BoxLayout GUI,其中涉及使用按钮和 JLabels。在下面的 ASCII 中,B 代表按钮,J 代表 JLabel。另外,我只在按钮和 JLabels

之间保留一点空间
__________________________
| |
| B J |
| B J |
| B J |
| J |
| |
|Button1 Button2 |
|________________________|

最佳答案

你可以有很多JPanel s,每个都有不同的布局。

对于这种情况,我可以想象有 GridBagLayout对于带有按钮和标签的面板,它们将在 JFrame 中居中的BorderLayout.CENTER对齐并将按钮放在底部 BoxLayout方向

import java.awt.BorderLayout;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;

import javax.swing.Box;
import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
import javax.swing.border.EmptyBorder;

public class ButtonsLeftAndRight {
private JFrame frame;
private JPanel bottomPane;
private JPanel centerPane;
private JButton button1;
private JButton button2;

public static void main(String[] args) {
SwingUtilities.invokeLater(new ButtonsLeftAndRight()::createAndShowGui);
}

public void createAndShowGui() {
frame = new JFrame(getClass().getSimpleName());

bottomPane = new JPanel();
bottomPane.setLayout(new BoxLayout(bottomPane, BoxLayout.LINE_AXIS));

button1 = new JButton("Button1");
button2 = new JButton("Button2");

bottomPane.add(button1);
bottomPane.add(Box.createHorizontalGlue());
bottomPane.add(button2);

frame.add(bottomPane, BorderLayout.SOUTH);
JButton b1 = new JButton("A");
JButton b2 = new JButton("B");
JButton b3 = new JButton("C");

centerPane = new JPanel();
centerPane.setLayout(new GridBagLayout());

GridBagConstraints gbc = new GridBagConstraints();

gbc.gridx = 0;
gbc.gridy = 0;
centerPane.add(b1, gbc);

gbc.gridx = 2;
centerPane.add(new JLabel("Label 1"), gbc);

gbc.gridx = 0;
gbc.gridy++;
centerPane.add(b2, gbc);

gbc.gridx = 2;
centerPane.add(new JLabel("Label 2"), gbc);

gbc.gridx = 0;
gbc.gridy++;
centerPane.add(b3, gbc);

gbc.gridx = 2;
centerPane.add(new JLabel("Label 3"), gbc);

gbc.gridx = 1;
gbc.gridy++;
centerPane.add(new JLabel("Centered Label"), gbc);

frame.add(centerPane, BorderLayout.CENTER);
frame.add(bottomPane, BorderLayout.SOUTH);

frame.pack();
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}

我们将标签放置在 gridx = 2 中所以我们可以在 gridx = 1 中添加底部标签位置,这在 JLabel 之间提供了额外的空间。 s 和 JButton s 的空格等于底部标签的长度。

这为我们提供了调整大小之前和之后的以下 GUI:

enter image description here

enter image description here

当然可能还有其他方法,但这是我想到的第一个

<小时/>

注意

  • 您添加了 setVisible(true)两次,一次就够了
  • frame.setSize(500, 500);frame.pack();使用其中之一,而不是同时使用。

关于java - 使用垂直和水平粘合的 BoxLayout,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46692485/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com