Как создать несколько кнопок, которые делают то же самое в разных позициях, не создавая настоящие новые кнопки? - PullRequest
0 голосов
/ 01 мая 2019

Я действительно новичок в Java и программировании в целом.В школе я решил поработать над проектом, чтобы повысить свою оценку, и поскольку простая тема java в настоящее время является нашей темой, я решил попытаться воссоздать линкоры в jframe, используя свинг.До сих пор я добился некоторого хорошего прогресса, но я застрял в проблеме качества жизни.

Итак, в основном, в редакторе, который мы используем (Java Editor (javaeditor.org)), я использую Swing для реализации кнопок и т. Д.в кадре.Поскольку мне понадобится много кнопок для игрового интерфейса, я хочу это сделать, поэтому мне не нужно делать несколько кнопок, которые должны быть заполнены аргументами.То, что я пытаюсь сделать - это заставить несколько аргументов создать несколько кнопок для меня, чтобы им не нужен был свой собственный «метод», поскольку все кнопки в основном должны делать одно и то же.

Я пытался искать похожие вещи на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]);  
    }

Как уже было сказано, я ожидаю, что здесь будет более 1 кнопки, при этом строки кода в конструкторе будут максимально короткими.

1 Ответ

1 голос

Если вам нужна сетка кнопок, создайте их в цикле for и поместите их в JPanel, используя GridLayout.Примерно так может работать:

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 и нулевых макетов.

Относительно:

.... без создания новых кнопок J

Это технически невозможно, если вы хотите полностью работающую кнопку (в отличие от создания визуализированной кнопки в JTable), однако кнопки могут совместно использовать ActionListeners, поэтому все кнопки, которыесделать то же самое (подумайте - все цифровые кнопки на калькуляторе) можно использовать тот же ActionListener.Кроме того, вы можете установить действие кнопки, используя свой собственный класс, который расширяется от AbstractAction для еще большей гибкости и мощности, и несколько кнопок (и JMenuItems) могут совместно использовать одно и то же действие.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...