Попытка использовать 1 слушатель действия для нескольких кнопок - PullRequest
1 голос
/ 26 марта 2019

Итак, я пытаюсь кодировать игру с угрозой, но суть в том, что я пытаюсь назначить свои кнопки только одному слушателю действия, чтобы все кнопки функционировали самостоятельно, а работа одного слушателя действия.

Я много пробовал, ничего не работает!package jep;

import java.awt.Color;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;

import javax.sound.sampled.AudioSystem;
import javax.sound.sampled.Clip;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;

public class jep implements ActionListener{


   public  JButton[][] t = new JButton[6][6];

public static void main(String[] args) {
    new jep();
    }
static int n = 100;

public jep() {


    JFrame frame = new JFrame("Jeopardy");
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);   
    frame.setSize(1920,1080);
    frame.setLayout(new GridLayout(6, 5));
    frame.setVisible(true);
    for (int r = 0; r < 6; r++) {
        for (int c = 0; c < 5; c++) {
            String vakue = String.valueOf(n);
            t[r][c] = new JButton(vakue);
            t[r][c].setBackground(Color.BLUE);
            t[r][c].setForeground(Color.YELLOW);
            t[r][c].addActionListener(this);
            frame.add(t[r][c]);
        }
        n = n +300;
    }

@Override
public void actionPerformed(ActionEvent arg0) {
    // TODO Auto-generated method stub

}

Я пытаюсь получить его, чтобы я мог нажимать несколько кнопок, используя только 1 прослушиватель действий, но все, что я могу получить, - это сетка

Ответы [ 2 ]

0 голосов
/ 26 марта 2019

Вот исправленный код с печатью на консоль при нажатии кнопки. Пожалуйста, проверьте комментарии в коде:

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class Jep implements ActionListener { // class name has to start with a capital letter

    int i = 6;
    int j = 5;

    public JButton[][] t = new JButton[i][j];

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

    static int n = 100;

    public Jep() {
        JFrame frame = new JFrame("Jeopardy");

        JPanel[][] panelHolder = new JPanel[i][j]; // use panels to add you buttons, check this for details:
        // /1498554/mogu-li-ya-dobavit-komponent-v-konkretnuy-yacheiku-setki-kogda-ispolzuetsya-gridlayout

        frame.setLayout(new GridLayout(i, j));
        frame.setVisible(true);

        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(1920, 1080);


        frame.setVisible(true);
        for (int r = 0; r < 6; r++) {
            for (int c = 0; c < 5; c++) {
                String vakue = String.valueOf(n);
                t[r][c] = new JButton(vakue);
                t[r][c].setBackground(Color.BLUE);
                t[r][c].setForeground(Color.BLACK);
                t[r][c].addActionListener(this);

                panelHolder[r][c] = new JPanel();

                panelHolder[r][c].add(t[r][c]);

                frame.add(panelHolder[r][c]);

                n = n + 300;
            }
        }
    }

    @Override
    public void actionPerformed(ActionEvent arg0) {
        System.out.println("press, value = " + arg0.getActionCommand()); // here is a simple system out log statement
    }
}

Вывод (при нажатии нескольких кнопок):

press, value = 100
press, value = 400
press, value = 700
press, value = 1000
press, value = 1300
press, value = 1600

Приложение Winodow: enter image description here

Надеюсь, это поможет.

0 голосов
/ 26 марта 2019

Вы можете использовать AbstractButton (суперкласс JButton) .setActionCommand, а затем в вашем слушателе с помощью команды действия вы можете выяснить вашу строку и столбец

Вместо создания массива JButton размером 6 x 6, вы должны использовать JTable, установить средство визуализации для отображения значений ваших ячеек в виде кнопок (или чего-то еще) и, как рекомендуется здесь, добавить listSelectionListener к табличной модели, чтобы получить строку и значения столбца по клику. Как рекомендуется здесь: Получить позицию Click JTable при использовании средства визуализации ячеек

Изучение JTable и как использовать рендеры и т. Д. Может занять немного времени. Но я предполагаю, что по этому вопросу вы все равно находитесь в учебной среде, что это не то, что делается для бизнеса, или? Поэтому я бы порекомендовал вам потратить время на изучение JTable. В конечном итоге вы будете намного счастливее с вашим конечным продуктом, который я вам обещаю.

...