gpt4 book ai didi

java - 如何使用 Swing 以编程方式制作这种网格?

转载 作者:行者123 更新时间:2023-12-02 03:45:42 25 4
gpt4 key购买 nike

我是 Java 新手。我想创建一个可以与一些逻辑代码交互的游戏网格。

我能够使用 Netbean 的 GUI 构建器工具来实现它(仅部分显示,但相同的模式重复最多可达 10 x 10)。但是我还不熟悉在代码中创建复杂的布局。

grid (partially shown)

问题是,将每个按钮连接到游戏逻辑中的数组元素似乎需要大量重复工作,因为似乎没有办法在 GUI 构建器中配置按钮数组.

(每组按钮都有自己的数组。)

有人可以告诉我如何纯粹用代码创建相同类型的网格吗?我猜 GridBagLayout 就是所需要的。 (不同类型的 block 之间的对齐很重要。)但是查看代码示例,似乎涉及很多概念,而且似乎有点太多,无法立即理解。我很高兴能从正确的方向开始。

或者,如果有一种方法可以在 GUI 构建器工具中有效地执行此操作,我想听听。

最佳答案

你基本上有两种选择,你可以以某种方式使用复合组件,例如,它似乎是一个重复的模式,所以你可以隔离单个“图 block ”,专注于单个图 block 的布局需求,然后使用不同的布局管理器对图 block 进行物理布局,或使用诸如 GridBagLayout 之类的东西来布局所有图 block 。

您使用哪个将取决于您想要实现的目标以及您想要生成的功能

Example

import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;

public class Test {

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

public Test() {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
ex.printStackTrace();
}

JFrame frame = new JFrame("Testing");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(new TestPane());
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
});
}

public class TestPane extends JPanel {

public TestPane() {
setLayout(new GridBagLayout());
GridBagConstraints gbc = new GridBagConstraints();
gbc.gridx = 0;
gbc.gridx = 0;
gbc.fill = GridBagConstraints.HORIZONTAL;
gbc.insets = new Insets(4, 4, 4, 4);

for (int row = 0; row < 9; row++) {
gbc.gridy = row;
for (int col = 0; col < 9; col++) {
gbc.gridx = col;
if (row % 2 == 0) {
if (col % 2 == 0) {
add(bigButton(), gbc);
} else {
add(verticalButton(), gbc);
}
} else if (col % 2 == 0) {
add(horizontalButton(), gbc);
}
}
}
}

protected JButton bigButton() {
JButton btn = new JButton() {
@Override
public Dimension getPreferredSize() {
return new Dimension(100, 100);
}
};
return btn;
}

protected JButton verticalButton() {
JButton btn = new JButton() {
@Override
public Dimension getPreferredSize() {
return new Dimension(45, 100);
}
};
return btn;
}

protected JButton horizontalButton() {
JButton btn = new JButton() {
@Override
public Dimension getPreferredSize() {
return new Dimension(100, 45);
}
};
return btn;
}
}

}

参见How to Use GridBagLayout了解更多详情

关于java - 如何使用 Swing 以编程方式制作这种网格?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36328048/

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