Как я могу отобразить другое сообщение для другой нажатой кнопки? - PullRequest
1 голос
/ 29 марта 2019

Во-первых, я бы хотел, чтобы об этом знали, я ОЧЕНЬ новичок в кодировании.Я хотел бы, чтобы мой код мог создавать разные сообщения JOptionPane для каждой нажатой кнопки

ive попытался включить t [1] [1] = JOptionPane (null, "message") (расположение каждой кнопки) однако возникла ошибка, говорящая о том, что вы не можете преобразовать Jbutton в строку.

import java.awt.Color;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
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, 6));

        frame.setVisible(true);
        for (int r = 0; r < 5; r++) {
            for (int c = 0; c < 6; 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) {
        JOptionPane.showInputDialog(null,"What's 1+1?");
    }
}

Мне бы хотелось, чтобы каждая нажатая кнопка говорила что-то еще ... Например, если вы нажимаете первую кнопку, на которой написано, что "КРАСНЫЙ "и второй" СИНИЙ "и т.д ...

Ответы [ 2 ]

1 голос
/ 30 марта 2019

Еще одна альтернатива этот действительный ответ :Вы можете изменить прослушиватель действий, чтобы определить, какая кнопка была нажата, и ответить соответствующим образом:

public void actionPerformed(ActionEvent e) {

    String value = e.getActionCommand();
    String message = "";

    switch(value){
        case "100":
            message = "RED";
            break;
        case "400":
            message = "BLUE";
            break;
        default:
            message = "Un recognized button pressed";
            break;
    }

    JOptionPane.showInputDialog(null,message);
}

Примечания: не устанавливайте frame.setSize(1920, 1080); вместо предпочитаемого размера и установите

    frame.pack();
    frame.setVisible(true);

приконец конструктора после добавления всех компонентов.

1 голос
/ 29 марта 2019

В настоящее время вы используете один и тот же ActionListener для каждой кнопки со статической строкой в ​​качестве сообщения, следовательно, все кнопки будут отображать одно и то же сообщение.

В следующем коде я создал отдельный внутренний класс с именем ButtonHandler для ActionListener, который позволяет передавать сообщение в конструкторе.Это позволит вам установить отдельное сообщение для каждой кнопки.Класс jep больше не нуждается в реализации ActionListener в этом примере, поскольку он теперь обрабатывается отдельным классом.

Простое решение, позволяющее каждой кнопке отображать что-то уникальное, - это заранее сохранять значения в массиве.Здесь я заполняю массив String разными именами цветов, а затем использую эти значения для назначения сообщений каждой кнопке.

Кроме того, я изменил условие в вашем внешнем цикле for на r <6, потому что в противном случае он не заполнил бы сетку 6x6 </p>

import java.awt.Color;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JOptionPane;

import java.awt.Color;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JOptionPane;

public class jep {

    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, 6));
        frame.setVisible(true);

        String[][] messages = new String[6][6];
        for(int r=0; r<6; r++) {
            for(int c=0; c<6; c++) {
                switch(c) {
                    case 0:
                        messages[r][c] = "RED";
                        break;
                    case 1:
                        messages[r][c] = "ORANGE";
                        break;
                    case 2:
                        messages[r][c] = "YELLOW";
                        break;
                    case 3:
                        messages[r][c] = "GREEN";
                        break;
                    case 4:
                        messages[r][c] = "BLUE";
                        break;
                    case 5:
                        messages[r][c] = "INDIGO";
                        break;
                }
            }
        }

        for (int r = 0; r < 6; r++) {
            for (int c = 0; c < 6; 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(new ButtonHandler(messages[r][c]));
                frame.add(t[r][c]);
            }
            n = n + 300;
        }
    }

    private class ButtonHandler implements ActionListener {
        private String message;

        public ButtonHandler(String message) {
            this.message = message;
        }

        @Override
        public void actionPerformed(ActionEvent arg0) {
            JOptionPane.showInputDialog(null, message);
        }
    }
}

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

Редактировать: объединенные примеры для краткости ...

...