当尝试在简单的java GUI程序中将ClearTeuttonHandler类中的setText()方法应用时,该方法无法找到JTextField的变量名称。目的是在用户选择清除按钮时清除文本。 “找不到符号,变量名称fNameInput”,并为我尝试使用该方法的每个变量。
import java.io.*;
import java.util.*;
import javax.swing.*;
import javax.swing.JOptionPane;
import java.awt.*;
import java.util.Scanner.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
/**
*
* @author joel.ramsey
*/
public class JRStarPhase5 extends JFrame{
public static void main (String [] args) throws IOException {
JFrame window = new JRStarPhase5();
window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
window.setVisible(true);
}//end main method
//constructor for JFrame
public JRStarPhase5(){
setTitle("JRStar Star Gaze Order Processing");
setSize (800,800);
Container pane = getContentPane();
GridLayout grid = new GridLayout(0,2);
pane.setLayout(grid);
JLabel fNameLabel = new JLabel ("First name:");
JLabel mi = new JLabel ("Middle initial:");
JLabel lNameLabel = new JLabel ("Last name:");
JLabel productChoice = new JLabel ("Star Gaze version:");
JLabel licenseQuantity = new JLabel ("License quantity:");
JLabel streetAddress = new JLabel ("Street address:");
JLabel city = new JLabel ("City:");
JLabel state = new JLabel ("State abbrev:");
JLabel zip = new JLabel ("Zip code:");
JLabel phone = new JLabel ("Phone Number:");
JTextField fNameInput = new JTextField (15);
JTextField miInput = new JTextField (1);
JTextField lNameInput = new JTextField (15);
JTextField productChoiceInput = new JTextField (1);
JTextField licenseQuantityInput = new JTextField (2);
JTextField streetAddressInput = new JTextField (20);
JTextField cityInput = new JTextField (20);
JTextField stateInput = new JTextField (2);
JTextField zipInput = new JTextField (5);
JTextField phoneInput = new JTextField (10);
//add as last buttons
JButton submit = new JButton("Submit");
SubmitButtonHandler sbh = new SubmitButtonHandler();
submit.addActionListener(sbh);
JButton clear = new JButton("Clear");
ClearButtonHandler cbh = new ClearButtonHandler();
clear.addActionListener(cbh);
pane.add(fNameLabel);
pane.add(fNameInput);
pane.add(mi);
pane.add(miInput);
pane.add(lNameLabel);
pane.add(lNameInput);
pane.add(productChoice);
pane.add(productChoiceInput);
pane.add(licenseQuantity);
pane.add(licenseQuantityInput);
pane.add(streetAddress);
pane.add(streetAddressInput);
pane.add(city);
pane.add(cityInput);
pane.add(state);
pane.add(stateInput);
pane.add(zip);
pane.add(zipInput);
pane.add(phone);
pane.add(phoneInput);
//add last
pane.add(submit);
pane.add(clear);
}//end constructor
private class SubmitButtonHandler implements ActionListener{
public void actionPerformed(ActionEvent e){
JOptionPane.showMessageDialog(null,"Your order has been submitted!");
System.exit(0);
}
}//end submit
private class ClearButtonHandler implements ActionListener{
public void actionPerformed(ActionEvent e){
fNameInput.setText("");
miInput.setText("");
lNameInput.setText("");
streetAddressInput.setText("");
}
}//end clear
}//end main class
答案 0 :(得分:2)
问题在于范围。由于您已定义的范围,ClearButtonHandler
类无法找到JtextField。
JtextFields的范围是JRStarPhase5构造函数。它们外面不可见。 将JTextField定义为JRStarPhase5构造函数的实例变量(外部),并在构造函数内实例化。
答案 1 :(得分:1)
JTextField
变量在ClearButtonHandler
范围内不可见。要修复,请在JRStarPhase5
类
public class JRStarPhase5 extends JFrame {
JTextField fNameInput;
...
同时删除JTextField
构造函数中的JRStarPhase5
个初始关键字以避免shadowing
fNameInput = new JTextField (15);
...
答案 2 :(得分:1)
我认为你的问题是,你的变量超出了范围。
您在构造函数中定义了TextField
,并在构造函数之后丢失了对此变量的引用。
尝试将它们定义为字段。
public class JRStarPhase5 extends JFrame{
public TextFild name1, name2, name3,... ;
...
public JRStarPhase5(){
this.name1 = new TextField("...");
//and so on..
现在您可以在下面的代码中使用它们。
答案 3 :(得分:1)
fNameInput
只有声明它的构造函数JRStarPhase5
具有本地上下文。
如果要访问构造函数之外的组件,则应将它们声明为实例字段...
例如
public class JRStarPhase5 extends JFrame{
/*...*/
private JTextField fNameInput;
/*...*/
public JRStarPhase5(){
/*...*/
fNameInput = new JTextField (15);
您可能需要查看Understanding Instance and Class Members了解更多详情
答案 4 :(得分:0)
在类中公开所有字段和标签,然后在构造函数中初始化它们。