gpt4 book ai didi

java - 如何创建多个在不同位置执行相同操作的按钮而不创建实际的新按钮?

转载 作者:行者123 更新时间:2023-12-02 09:56:53 25 4
gpt4 key购买 nike

我对 java 和整个编程都很陌生。在学校里,我决定做一个项目来提高我的成绩,由于简单的 java 目前是我们的主题,我决定尝试使用 swing 在 jframe 中重新创建战舰。到目前为止,我已经取得了一些良好的进展,但我仍陷入生活质量问题。

基本上,在我们使用的编辑器(Java 编辑器(javaeditor.org))中,我使用 swing 来在 jframe 中实现按钮等。因为我需要很多游戏 GUI 按钮,所以我想这样做,所以我不必制作几个必须填写参数的按钮。我想做的是让一些参数为我创建几个按钮,这样它们实际上并不需要自己的“方法”,因为所有按钮基本上都必须做完全相同的事情。

我尝试在谷歌上搜索类似的东西,但找不到任何东西,所以我决定创建这个帐户来询问是否有人可以帮助我解决这个问题。如果有什么不明白的地方,请随时提问(英语不是我的母语,所以有些部分可能很难理解)。

期待您的回复!预先感谢您的帮助。

最初我以为我可以使用 for 循环来创建这些多个按钮,但 ActionPerformed 参数总是会出现某种错误。

for (int i = 0;i > 25;i++ ) {
jButton[i].setBounds(48, 48 + i, 113, 73);
jButton[i].setText("jButton1");
jButton[i].setMargin(new Insets(2, 2, 2, 2));
jButton[i].addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
jButton[i]_ActionPerformed(evt);
}
});
cp.add(jButton[i]);
}

正如已经说过的,我希望有超过 1 个按钮,同时保持构造函数中的代码行尽可能短。

最佳答案

如果您需要按钮网格,请在 for 循环中创建它们,并使用 GridLayout 将它们放置在 JPanel 中。像这样的东西可能会起作用:

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

@SuppressWarnings("serial")
public class ManyButtons extends JPanel {
private static final int SIDES = 10;
private JButton[][] buttonGrid = new JButton[SIDES][SIDES];

public ManyButtons() {
setLayout(new GridLayout(SIDES, SIDES));
for (int row = 0; row < buttonGrid.length; row++) {
for (int col = 0; col < buttonGrid[row].length; col++) {
String text = String.format("[%d, %d]", col + 1, row + 1);
buttonGrid[row][col] = new JButton(text);
buttonGrid[row][col].addActionListener(event -> {
String command = event.getActionCommand();
System.out.println("Button pressed: " + command);
});
add(buttonGrid[row][col]);
}
}
}

public static void main(String[] args) {
SwingUtilities.invokeLater(() -> createAndShowGui());
}

private static void createAndShowGui() {
ManyButtons mainPanel = new ManyButtons();
JFrame frame = new JFrame("Many Buttons");
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
frame.add(mainPanel);
frame.pack();
frame.setLocationByPlatform(true);
frame.setVisible(true);
}
}

还要避免 setBounds 和 null 布局。

关于:

.... without creating new JButtons

如果您想要一个功能齐全的按钮(而不是在 JTable 中创建呈现的按钮),这在技术上是不可能的,但是,按钮可以共享 ActionListener,因此所有具有相同功能的按钮事物(想想计算器上的所有数字按钮)可以使用完全相同的 ActionListener。或者,您可以使用自己的从 AbstractAction 扩展的类来设置按钮的操作,以获得更大的灵 active 和功能,并且多个按钮(和 JMenuItems)可以共享相同的操作。

关于java - 如何创建多个在不同位置执行相同操作的按钮而不创建实际的新按钮?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55935036/

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