我想在下个学期要做的事情上抢先一步。它基本上是一个手机的模板,由一个JTextField组成,用于显示按下的按钮。我的问题是,当创建我的actionlistener时,JTextField (名为"numIn")不被识别,得到一个错误,说它不能被解析。下面是我设置手机JPanel的代码:
public class Template
{
// the dial pad button strings
private static final String[][] BUTTONSTRINGS =
{
{"1", "2", "3"},
{"4", "5", "6"},
{"7", "8", "9"},
{"*", "0", "#"}
};
private static final Dimension JUNK_SIZE = new Dimension(200, 160);
private JPanel mainPanel = new JPanel();
public Template()
{
JTextField numIn = new JTextField("Enter Phone Number");
JTextField numDisplay = new JTextField("PhoneNumber");
JPanel otherJunkPanel = new JPanel();
otherJunkPanel.add(numDisplay);
otherJunkPanel.add(numIn);
otherJunkPanel.add(new JButton("Send"));
otherJunkPanel.setPreferredSize(JUNK_SIZE);
JPanel dialPadPanel = new JPanel(new GridLayout(0, 3));下面是两个动作监听器,一个用于数字,另一个用于非数字:
// action listener for the number buttons only
NumberButtonListener numberBtnListener = new NumberButtonListener();
// listener for other buttons
NonNumberButtonListener nonNumberBtnListener = new NonNumberButtonListener();
for (int i = 0; i < BUTTONSTRINGS.length; i++)
{
for (int j = 0; j < BUTTONSTRINGS[i].length; j++)
{
String btnString = BUTTONSTRINGS[i][j]; // get the button string from array
JButton btn = new JButton(btnString); // use it to make button
// if a number button, add the number button's listener
if ("012345679".contains(btnString))
{
btn.addActionListener(numberBtnListener);
}
else
{
btn.addActionListener(nonNumberBtnListener);
}这就是我的错误所在,当我告诉操作侦听器在名为" numIn“的JTextField上显示按钮时,numIn无法识别:
private class NumberButtonListener implements ActionListener
{
public void actionPerformed(ActionEvent e)
{
String buttonPressedString = e.getActionCommand();
numIn.setText("Number Button Pressed: " + buttonPressedString);
// TODO finish
}
}我在编码方面不是很强,因为它不是我的专业,所以我感谢任何可能的帮助。我可能应该先说,这段代码的大部分都是从我过去做过的零星实验中得到的。谢谢!
发布于 2015-06-11 04:06:30
您的numIn是构造器上的一个局部变量。
如果要在其他方法上使用它,则应将其声明为类变量。(或者通过方法的参数传递)
发布于 2015-06-11 04:07:08
JTextField numIn = new JTextField("Enter Phone Number");
JTextField numDisplay = new JTextField("PhoneNumber");
public Template()
{
.......你需要把它放在类级作用域中。目前它在构造器中。因此,它不能用于构造函数的外部
发布于 2015-06-11 04:15:25
尝尝这个
private class NumberButtonListener implements ActionListener
{
Template parent=null;
NumberButtonListener(Template parent)
{
this.parent = parent;
}
public void actionPerformed(ActionEvent e)
{
String buttonPressedString = e.getActionCommand();
parent.numIn.setText("Number Button Pressed: " + buttonPressedString);
// TODO finish
}
}然后改变这个
NumberButtonListener numberBtnListener = new NumberButtonListener();至
NumberButtonListener numberBtnListener = new NumberButtonListener(this);将新的私有字段添加到模板类中
private JTextField numIn=null;在构造函数中更改为
numIn = new JTextField("Enter Phone Number");https://stackoverflow.com/questions/30766210
复制相似问题