Java 如何通过在不同对象中创建的事件编辑变量?
下面是一些有2个对象的示例代码。一个用于轻松创建面板和侦听器的面板对象,以及一个用于执行代码的框架对象。目的是让代码显示answertext字段中按下的按钮。然而,我看不到一种方法可以让它编译,因为无论我在哪里制作answertext都超出了我需要的其他内容的范围Java 如何通过在不同对象中创建的事件编辑变量?,java,object,actionlistener,Java,Object,Actionlistener,下面是一些有2个对象的示例代码。一个用于轻松创建面板和侦听器的面板对象,以及一个用于执行代码的框架对象。目的是让代码显示answertext字段中按下的按钮。然而,我看不到一种方法可以让它编译,因为无论我在哪里制作answertext都超出了我需要的其他内容的范围 import java.awt.*; import java.awt.event.*; import javax.swing.*; class myPanel extends JPanel implements ActionLi
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
class myPanel extends JPanel implements ActionListener {
public myPanel(int start, int numOfButtons){
setLayout(new FlowLayout(FlowLayout.LEFT, 10, 20));
JButton buttons[] = new JButton[numOfButtons];
for (int k = start; k < start + numOfButtons; k++){
buttons[ k ] = new JButton("Button " + k);
this.add( buttons[k] );
buttons[ k ].addActionListener(this);
}
}
public void actionPerformed(ActionEvent e)
{
myFrame.setText(e.getActionCommand());
}
}
public class myFrame extends JFrame{
public myFrame()
{
super("myFrame");
myPanel buttonPanel1 = new myPanel(1, 3);
myPanel buttonPanel2 = new myPanel(4, 3);
JPanel answerPanel = new JPanel();
JTextField answertext;
answertext = new JTextField(10);
answertext.setEditable(false);
answerPanel.add(answertext);
setSize(300,200);
setLocationRelativeTo(null);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLayout( new GridLayout(3,1) );
setTitle("ShowPressedButton");
add(buttonPanel1);
add(answerPanel);
add(buttonPanel2);
pack();
setVisible(true);
}
public void setText(string input)
{
answertext = input;
}
public static void main(String[] args) {
myFrame showButton = new myFrame();
showButton.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
}
}
import java.awt.*;
导入java.awt.event.*;
导入javax.swing.*;
类myPanel扩展JPanel实现ActionListener{
公共myPanel(int start,int numo按钮){
setLayout(新的FlowLayout(FlowLayout.LEFT,10,20));
JButton buttons[]=新JButton[numOfButtons];
对于(int k=start;k
我放置了一个公共方法来设置answertext,以便mypanel可以设置它,但是编译器说,当我尝试在mypanel类中编译实现此函数时,它找不到该方法
public JTextField get(){
return answerText;
}
然后在myframe中,使用mypanel类对象调用上述方法,并向mypanel类添加一些变量
class myPanel extends JPanel implements ActionListener {
private List<ActionListener> actionListeners = new ArrayList<ActionListener>();
public myPanel(final int start, final int numOfButtons) {
// same code
}
public void actionPerformed(final ActionEvent e) {
for (final ActionListener listener : actionListeners) {
listener.actionPerformed(e);
}
}
public void addActionListener(final ActionListener listener) {
actionListeners.add(listener)
}
// todo: remove / reset ActionListener ...
}
类myPanel扩展JPanel实现ActionListener{
私有列表actionListeners=new ArrayList();
公共myPanel(最终整数开始、最终整数按钮){
//相同代码
}
已执行的公共无效行动(最终行动事件e){
for(最终ActionListener:actionListeners){
监听器执行的动作(e);
}
}
public void addActionListener(最终ActionListener侦听器){
添加(监听器)
}
//todo:删除/重置ActionListener。。。
}
在此之后,您可以在类myFrame中添加一个ActionListener,它知道JTextfield并可以对其进行操作。将这个新的ActionListener添加到myPanel框架后,您应该知道按下了哪个按钮