如何为不同的单击按钮显示不同的消息?
How can I display a different message for a different clicked button?
首先,我希望大家知道我对编码非常陌生。我想让我的代码能够为每个单击的按钮生成不同的 JOptionPane 消息
我试过包括 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?");
}
}
我希望每个点击的按钮都能显示其他内容...例如,如果您点击第一个按钮,它会显示 "RED" 和第二个 "BLUE" 等...
现在您正在为每个按钮使用相同的 ActionListener,并将静态字符串作为消息,因此,所有按钮都将显示相同的消息。
在下面的代码中,我创建了一个名为 ButtonHandler 的单独内部 class 作为 ActionListener,它允许您在构造函数中传递消息。这将允许您为每个按钮设置单独的消息。 jep class 不再需要在此示例中实现 ActionListener,因为它现在由单独的 class 处理。
使每个按钮显示独特内容的一个简单解决方案是提前将值存储在数组中。在这里,我用不同的颜色名称填充了一个字符串数组,然后我使用这些值将消息分配给每个按钮。
此外,我将外部 for 循环中的条件更改为 r<6,否则它不会填充 6x6 网格
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);
}
}
}
希望对您有所帮助!
编辑:为简洁起见合并示例...
的另一种选择:
您可以更改动作侦听器以识别单击了哪个按钮,并做出相应的响应:
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);
在构造函数的末尾,添加完所有组件后。
首先,我希望大家知道我对编码非常陌生。我想让我的代码能够为每个单击的按钮生成不同的 JOptionPane 消息
我试过包括 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?");
}
}
我希望每个点击的按钮都能显示其他内容...例如,如果您点击第一个按钮,它会显示 "RED" 和第二个 "BLUE" 等...
现在您正在为每个按钮使用相同的 ActionListener,并将静态字符串作为消息,因此,所有按钮都将显示相同的消息。
在下面的代码中,我创建了一个名为 ButtonHandler 的单独内部 class 作为 ActionListener,它允许您在构造函数中传递消息。这将允许您为每个按钮设置单独的消息。 jep class 不再需要在此示例中实现 ActionListener,因为它现在由单独的 class 处理。
使每个按钮显示独特内容的一个简单解决方案是提前将值存储在数组中。在这里,我用不同的颜色名称填充了一个字符串数组,然后我使用这些值将消息分配给每个按钮。
此外,我将外部 for 循环中的条件更改为 r<6,否则它不会填充 6x6 网格
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);
}
}
}
希望对您有所帮助!
编辑:为简洁起见合并示例...
您可以更改动作侦听器以识别单击了哪个按钮,并做出相应的响应:
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);
在构造函数的末尾,添加完所有组件后。