Java 位于5个不同JPanel中的JButton数组中的操作侦听器
我有一个任务,将字母表的字母按照我在下面编码的布局放在5个面板中。当您选择一个按钮时,它会更改标签以读取所单击的按钮。 第一种方法是,我把每一个按钮分别添加到每个面板中,并添加所有的Java 位于5个不同JPanel中的JButton数组中的操作侦听器,java,swing,jbutton,actionlistener,Java,Swing,Jbutton,Actionlistener,我有一个任务,将字母表的字母按照我在下面编码的布局放在5个面板中。当您选择一个按钮时,它会更改标签以读取所单击的按钮。 第一种方法是,我把每一个按钮分别添加到每个面板中,并添加所有的ActionListeners和文本。这是大约200行,但运作良好。我认为将JButtons放入数组并在此时添加侦听器和文本会更简洁。我能够将JFrame放到布局中,但我不知道如何使用ActionListener。我是否必须添加一个MouseListener,以确定单击了哪个面板,然后确定按钮被按下 import j
ActionListeners
和文本。这是大约200行,但运作良好。我认为将JButtons
放入数组并在此时添加侦听器和文本会更简洁。我能够将JFrame
放到布局中,但我不知道如何使用ActionListener
。我是否必须添加一个MouseListener
,以确定单击了哪个面板,然后确定按钮被按下
import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.Container;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;
public class JFileCabinet1 extends JFrame implements ActionListener {
String[] lettersPanel1 = { "A", "B", "C", "D", "E", "F" };
String[] lettersPanel2 = { "G", "H", "I", "J", "K", "L" };
String[] lettersPanel3 = { "M", "N", "O", "P", "Q", "R" };
String[] lettersPanel4 = { "S", "T", "U", "V", "W", "X" };
String[] lettersPanel5 = { "Y", "Z" };
private JPanel jp1 = new JPanel(new GridLayout(1, 6));
private JPanel jp2 = new JPanel(new GridLayout(1, 6));
private JPanel jp3 = new JPanel(new GridLayout(1, 6));
private JPanel jp4 = new JPanel(new GridLayout(1, 6));
private JPanel jp5 = new JPanel(new GridLayout(1, 6));
private JButton jblank1 = new JButton();
private JButton jblank2 = new JButton();
private JButton jblank3 = new JButton();
private JLabel jl = new JLabel("");
private Container con = getContentPane();
private GridLayout layout = new GridLayout(5, 1, 5, 5);
public JFileCabinet1() {
super("File cabinet");
con.add(jp1);
for (int i = 0; i < lettersPanel1.length; i++) {
JButton button[] = new JButton[lettersPanel1.length];
button[i] = new JButton(lettersPanel1[i]);
jp1.add(button[i]);
button[i].addActionListener(this);
}
con.add(jp2);
for (int i = 0; i < lettersPanel2.length; i++) {
JButton button[] = new JButton[lettersPanel2.length];
button[i] = new JButton(lettersPanel2[i]);
jp2.add(button[i]);
button[i].addActionListener(this);
}
con.add(jp3);
for (int i = 0; i < lettersPanel2.length; i++) {
JButton button[] = new JButton[lettersPanel3.length];
button[i] = new JButton(lettersPanel3[i]);
jp3.add(button[i]);
button[i].addActionListener(this);
}
con.add(jp4);
for (int i = 0; i < lettersPanel4.length; i++) {
JButton button[] = new JButton[lettersPanel4.length];
button[i] = new JButton(lettersPanel4[i]);
jp4.add(button[i]);
button[i].addActionListener(this);
}
con.add(jp5);
for (int i = 0; i < lettersPanel5.length; i++) {
JButton button[] = new JButton[lettersPanel5.length];
button[i] = new JButton(lettersPanel2[i]);
jp5.add(button[i]);
button[i].addActionListener(this);
}
jp5.add(jblank1).setVisible(false);
jp5.add(jblank2).setVisible(false);
jp5.add(jblank3).setVisible(false);
setSize(500, 500);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
setLayout(layout);
}
public void actionPerformed(ActionEvent e) {
JButton src = (JButton) e.getSource();
}
public static void main(String[] args) {
JFileCabinet1 frame = new JFileCabinet1();
frame.setVisible(true);
}
}
导入java.awt.BorderLayout;
导入java.awt.Component;
导入java.awt.Container;
导入java.awt.GridLayout;
导入java.awt.event.ActionEvent;
导入java.awt.event.ActionListener;
导入javax.swing.*;
公共类JFileCabinet1扩展了JFrame实现ActionListener{
字符串[]lettersPanel1={“A”、“B”、“C”、“D”、“E”、“F”};
字符串[]lettersPanel2={“G”、“H”、“I”、“J”、“K”、“L”};
字符串[]lettersPanel3={“M”、“N”、“O”、“P”、“Q”、“R”};
字符串[]lettersPanel4={“S”、“T”、“U”、“V”、“W”、“X”};
字符串[]lettersPanel5={“Y”,“Z”};
private JPanel jp1=新JPanel(新网格布局(1,6));
private JPanel jp2=新JPanel(新网格布局(1,6));
private JPanel jp3=新JPanel(新网格布局(1,6));
private JPanel jp4=新JPanel(新网格布局(1,6));
私有JPanel jp5=新JPanel(新网格布局(1,6));
私有JButton jblank1=新JButton();
私有JButton jblank2=新JButton();
私有JButton jblank3=新JButton();
私有JLabel jl=新JLabel(“”);
私有容器con=getContentPane();
私有网格布局=新网格布局(5,1,5,5);
公共JFileCabinet1(){
超级(“文件柜”);
补充条款(jp1);
对于(int i=0;i
我是否必须添加鼠标侦听器才能找到单击的面板
然后确定按钮被按下了
import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.Container;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;
public class JFileCabinet1 extends JFrame implements ActionListener {
String[] lettersPanel1 = { "A", "B", "C", "D", "E", "F" };
String[] lettersPanel2 = { "G", "H", "I", "J", "K", "L" };
String[] lettersPanel3 = { "M", "N", "O", "P", "Q", "R" };
String[] lettersPanel4 = { "S", "T", "U", "V", "W", "X" };
String[] lettersPanel5 = { "Y", "Z" };
private JPanel jp1 = new JPanel(new GridLayout(1, 6));
private JPanel jp2 = new JPanel(new GridLayout(1, 6));
private JPanel jp3 = new JPanel(new GridLayout(1, 6));
private JPanel jp4 = new JPanel(new GridLayout(1, 6));
private JPanel jp5 = new JPanel(new GridLayout(1, 6));
private JButton jblank1 = new JButton();
private JButton jblank2 = new JButton();
private JButton jblank3 = new JButton();
private JLabel jl = new JLabel("");
private Container con = getContentPane();
private GridLayout layout = new GridLayout(5, 1, 5, 5);
public JFileCabinet1() {
super("File cabinet");
con.add(jp1);
for (int i = 0; i < lettersPanel1.length; i++) {
JButton button[] = new JButton[lettersPanel1.length];
button[i] = new JButton(lettersPanel1[i]);
jp1.add(button[i]);
button[i].addActionListener(this);
}
con.add(jp2);
for (int i = 0; i < lettersPanel2.length; i++) {
JButton button[] = new JButton[lettersPanel2.length];
button[i] = new JButton(lettersPanel2[i]);
jp2.add(button[i]);
button[i].addActionListener(this);
}
con.add(jp3);
for (int i = 0; i < lettersPanel2.length; i++) {
JButton button[] = new JButton[lettersPanel3.length];
button[i] = new JButton(lettersPanel3[i]);
jp3.add(button[i]);
button[i].addActionListener(this);
}
con.add(jp4);
for (int i = 0; i < lettersPanel4.length; i++) {
JButton button[] = new JButton[lettersPanel4.length];
button[i] = new JButton(lettersPanel4[i]);
jp4.add(button[i]);
button[i].addActionListener(this);
}
con.add(jp5);
for (int i = 0; i < lettersPanel5.length; i++) {
JButton button[] = new JButton[lettersPanel5.length];
button[i] = new JButton(lettersPanel2[i]);
jp5.add(button[i]);
button[i].addActionListener(this);
}
jp5.add(jblank1).setVisible(false);
jp5.add(jblank2).setVisible(false);
jp5.add(jblank3).setVisible(false);
setSize(500, 500);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
setLayout(layout);
}
public void actionPerformed(ActionEvent e) {
JButton src = (JButton) e.getSource();
}
public static void main(String[] args) {
JFileCabinet1 frame = new JFileCabinet1();
frame.setVisible(true);
}
}
不,不要在按钮上使用鼠标侦听器。您的ActionListener
实现很好,getSource
将为您提供按下的按钮
要将标签设置为按钮的文本,请使用jl.setText(src.getText())
insideactionPerformed
如果需要按钮所在的面板,请使用按钮的getParent()
我是否必须添加鼠标侦听器才能找到单击的面板
然后确定按钮被按下了
import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.Container;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;
public class JFileCabinet1 extends JFrame implements ActionListener {
String[] lettersPanel1 = { "A", "B", "C", "D", "E", "F" };
String[] lettersPanel2 = { "G", "H", "I", "J", "K", "L" };
String[] lettersPanel3 = { "M", "N", "O", "P", "Q", "R" };
String[] lettersPanel4 = { "S", "T", "U", "V", "W", "X" };
String[] lettersPanel5 = { "Y", "Z" };
private JPanel jp1 = new JPanel(new GridLayout(1, 6));
private JPanel jp2 = new JPanel(new GridLayout(1, 6));
private JPanel jp3 = new JPanel(new GridLayout(1, 6));
private JPanel jp4 = new JPanel(new GridLayout(1, 6));
private JPanel jp5 = new JPanel(new GridLayout(1, 6));
private JButton jblank1 = new JButton();
private JButton jblank2 = new JButton();
private JButton jblank3 = new JButton();
private JLabel jl = new JLabel("");
private Container con = getContentPane();
private GridLayout layout = new GridLayout(5, 1, 5, 5);
public JFileCabinet1() {
super("File cabinet");
con.add(jp1);
for (int i = 0; i < lettersPanel1.length; i++) {
JButton button[] = new JButton[lettersPanel1.length];
button[i] = new JButton(lettersPanel1[i]);
jp1.add(button[i]);
button[i].addActionListener(this);
}
con.add(jp2);
for (int i = 0; i < lettersPanel2.length; i++) {
JButton button[] = new JButton[lettersPanel2.length];
button[i] = new JButton(lettersPanel2[i]);
jp2.add(button[i]);
button[i].addActionListener(this);
}
con.add(jp3);
for (int i = 0; i < lettersPanel2.length; i++) {
JButton button[] = new JButton[lettersPanel3.length];
button[i] = new JButton(lettersPanel3[i]);
jp3.add(button[i]);
button[i].addActionListener(this);
}
con.add(jp4);
for (int i = 0; i < lettersPanel4.length; i++) {
JButton button[] = new JButton[lettersPanel4.length];
button[i] = new JButton(lettersPanel4[i]);
jp4.add(button[i]);
button[i].addActionListener(this);
}
con.add(jp5);
for (int i = 0; i < lettersPanel5.length; i++) {
JButton button[] = new JButton[lettersPanel5.length];
button[i] = new JButton(lettersPanel2[i]);
jp5.add(button[i]);
button[i].addActionListener(this);
}
jp5.add(jblank1).setVisible(false);
jp5.add(jblank2).setVisible(false);
jp5.add(jblank3).setVisible(false);
setSize(500, 500);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
setLayout(layout);
}
public void actionPerformed(ActionEvent e) {
JButton src = (JButton) e.getSource();
}
public static void main(String[] args) {
JFileCabinet1 frame = new JFileCabinet1();
frame.setVisible(true);
}
}
不,不要在按钮上使用鼠标侦听器。您的ActionListener
实现很好,getSource
将为您提供按下的按钮
要将标签设置为按钮的文本,请使用jl.setText(src.getText())
insideactionPerformed
如果您想要按钮所在的面板,请使用按钮的
getParent()
。事实是,一旦启动actionPerformed
,您实际上不需要数组,直接用于ActionListener
,您可以从ActionEvent
s源属性获取JButton
,并从按钮提取文本
public void actionPerformed(ActionEvent e) {
JButton src = (JButton) e.getSource();
System.out.println(src.getText());
}
现在,如果您希望按钮包含更多信息(或显示的信息不同),可以使用按钮actionCommand
属性
还有,这个
for (int i = 0; i < lettersPanel2.length; i++) {
JButton button[] = new JButton[lettersPanel2.length];
简单地说,就像
addButtonsTo(lettersPanel1, jp1);
addButtonsTo(lettersPanel2, jp2);
addButtonsTo(lettersPanel3, jp3);
addButtonsTo(lettersPanel4, jp4);
addButtonsTo(lettersPanel5, jp5);
通读一遍,了解更多细节…事实上,对于
ActionListener
,您实际上不需要直接使用数组,一旦启动actionPerformed
,您就可以从ActionEvent
的源属性中获取JButton
,并从按钮中提取文本
public void actionPerformed(ActionEvent e) {
JButton src = (JButton) e.getSource();
System.out.println(src.getText());
}
现在,如果您希望按钮携带更多信息(或不同的信息)