对于Java和整个编程来说,我真的是新手。在学校里,我决定进行一个项目来提高自己的成绩,由于简单的Java目前是我们的主题,所以我决定尝试使用swing在jframe中重新创建战舰。到目前为止,我已经取得了一些不错的进步,但是我陷入了生活质量问题。
因此,基本上,在编辑器中,我们使用(Java Editor(javaeditor.org)),我使用swing在jframe中实现按钮等。由于我需要为游戏gui设置很多按钮,因此我想这样做,因此我不必制作几个必须用参数填充的按钮。我想做的是让一些参数为我创建几个按钮,因此它们实际上都不需要自己的“方法”,因为所有按钮必须基本上执行完全相同的操作。
我尝试在Google上搜索类似的内容,但找不到任何内容,因此我决定创建此帐户,以询问是否有人可以帮助我解决此问题。如果有些事情无法理解,请随时问(英语不是我的母语,所以某些部分可能很难理解)。
期待任何答复!预先感谢您的帮助。
起初我以为我可以使用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]);
}
正如已经说过的那样,我希望会有多个按钮,同时使构造函数中的代码行尽可能短。
答案 0 :(得分: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
和空布局。
关于:
....而不创建新的JButtons
如果您想要一个功能齐全的按钮(而不是在JTable中创建呈现的按钮),从技术上讲是不可能的,但是 ,这些按钮可以共享ActionListener,因此所有执行相同功能的按钮事物(想想-计算器上的所有数字按钮)都可以使用相同的ActionListener。另外,您可以使用从AbstractAction扩展来的类来设置按钮的Action,以提供更大的灵活性和功能,并且多个按钮(和JMenuItems)可以共享同一操作。