我正在为学校做这项作业。我一直在一遍又一遍地查看我的代码。问题是,当我尝试运行该程序时,我无法将数据输入到字段中。当我尝试选择字段来输入数据时,它不允许我这样做。有人请帮助我!
import java.awt.Container;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.FocusEvent;
import java.awt.event.FocusListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.text.DecimalFormat;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;
public class OfficeAreaCalculator extends JFrame{
private JFrame mainFrame;
private JButton calculateButton;
private JButton exitButton;
private JTextField lengthField;
private JTextField widthField;
private JTextField areaField;
private JLabel lengthLabel;
private JLabel widthLabel;
private JLabel areaLabel;
public OfficeAreaCalculator()
{
mainFrame = new JFrame("Office Area Calculator");
exitButton = new JButton("Exit");
lengthLabel = new JLabel("Enter the length of the office:");
widthLabel = new JLabel("Enter the width of the office:");
areaLabel = new JLabel("Office area:");
lengthField = new JTextField(5);
widthField = new JTextField(5);
areaField = new JTextField(5);
areaField.setEditable(false);
calculateButton = new JButton("Calculate");
Container c = mainFrame.getContentPane();
c.setLayout(new FlowLayout());
c.add(lengthLabel);
c.add(lengthField);
c.add(widthLabel);
c.add(widthField);
c.add(areaLabel);
c.add(areaField);
c.add(calculateButton);
c.add(exitButton);
calculateButton.setMnemonic('C');
exitButton.setMnemonic('X');
mainFrame.setSize(260, 150);
mainFrame.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
CalculateButtonHandler chandler = new CalculateButtonHandler();
calculateButton.addActionListener(chandler);
ExitButtonHandler ehandler = new ExitButtonHandler();
exitButton.addActionListener(ehandler);
FocusHandler fhandler = new FocusHandler();
lengthField.addFocusListener(fhandler);
widthField.addFocusListener(fhandler);
areaField.addFocusListener(fhandler);
mainFrame.setVisible(true);
}
class CalculateButtonHandler implements ActionListener
{
public void actionPerformed(ActionEvent e)
{
DecimalFormat num = new DecimalFormat(",###.##");
double width, length, area;
String instring;
instring = lengthField.getText();
if (instring.equals(""));
{
instring = ("0");
lengthField.setText("0");
}
length = Double.parseDouble(instring);
instring = widthField.getText();
if (instring.equals(""))
{
instring = "0";
widthField.setText("0");
}
width = Double.parseDouble(instring);
area = length * width;
areaField.setText(num.format(area));
}
}
class ExitButtonHandler implements ActionListener
{
public void actionPerformed(ActionEvent e) {
System.exit(0);
}
}
class FocusHandler implements FocusListener
{
public void focusGained(FocusEvent e)
{
if (e.getSource() == lengthField || e.getSource() == widthField)
{
areaField.setText("");
}
else if (e.getSource() == areaField);
{
calculateButton.requestFocus();
}
}
public void focusLost(FocusEvent e)
{
if (e.getSource() == widthField)
{
calculateButton.requestFocus();
}
}
}
public static void main(String arg[])
{
new OfficeAreaCalculator();
}
}
最佳答案
一般建议。在开始测试之前,不要一次性编写整个程序。
1) 只需使用所有组件创建 GUI。即删除所有监听器代码并查看它是否有效。
2) 一次添加一个监听器,然后查看每个监听器是否正常工作。
3)当代码停止工作时,您就知道问题出在哪里,并且知道在哪里花时间进行调试,并且您将能够向我们提供更多信息来帮助解决问题。
事实证明问题是一个拼写错误:
else if (e.getSource() == areaField);
语句末尾不应有 ";"
,这会导致每次尝试时都会执行 calculateButton.requestFocus();
语句将焦点放在任一文本字段上。
作为一般规则,您不应该使用 FocusListener 来尝试控制组件的焦点。使用 Tab 键时焦点会自然移动。您的“areaField”实际上不应该是文本字段。它可能应该是一个永远不会获得焦点的 JLabel,因此焦点将直接从宽度文本字段转到按钮。
关于java - 我无法在字段中输入数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25101415/