我正在尝试编写一个代码,其中弹出三个字段,它将乘以前两个输入并自动更新第三个字段,并在输入值时更改最后一个字段的值和text属性进入第一个领域?
import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class Solver implements ActionListener {
void actionPerformed(ActionEvent E){
JTextField xField = new JTextField(5);
JTextField yField = new JTextField(5);
JTextField zField = new JTextField(5);
JPanel myPanel = new JPanel();
myPanel.add(new JLabel("x:"));
myPanel.add(xField);
myPanel.add(Box.createHorizontalStrut(15));
myPanel.add(new JLabel("y:"));
myPanel.add(yField);
myPanel.add(Box.createHorizontalStrut(15));
myPanel.add(new JLabel("z:"));
myPanel.add(zField);
int result = JOptionPane.showConfirmDialog(null, myPanel,
"please enter X and Y value", JOptionPane.OK_CANCEL_OPTION);
double x = Double.parseDouble(xField.getText());
double y = Double.parseDouble(yField.getText());
if(result == JOptionPane.OK_OPTION) {
System.out.println(x+10.0);
System.out.println(y + 10);
}
}
}
现在我打印两个初始值都加上10只是为了确保它们被设置为双倍,但如果有人可以帮我把zField更改为任何会被欣赏的算术(如果有人可以摆脱与ActionPerformed冲突的错误与ActionLister冲突,也将非常感激。)
答案 0 :(得分:2)
将一个或多个ActionListener
附加到您正在显示的JTextField
,并在调用actionPerformed
方法时执行所需的算术。
问题在于,用户需要按下"动作"键(通常为 Enter )以触发ActionListener
有关详细信息,请参阅How to write an action listener。
使用FocusListener
并监控文本字段中的focusLost
事件,并在焦点丢失时执行所需的算术。
问题在于,用户需要在触发focusLost
事件之前离开最后一个字段并且不会立即显现
有关详细信息,请参阅How to write a focus listener
使用DocumentListener
,可以在字段更新时实时通知您。
一旦确定两个字段都处于有效状态(即非空且包含适当的数字),您就可以执行所需的算术运算
有关详细信息,请参阅How to write a Document Listener
无论您选择哪个方向,我都会亲自创建一个自定义类,该类实现了所需的interface
,并且需要对每个字段进行引用。这样它就能够执行所需的操作并更新所需的字段independenlty
答案 1 :(得分:0)
import javax.swing.*;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class JTquestion {
public static class Solver extends JFrame {
public Solver(){
setTitle("please enter X and Y value");
GridBagConstraints c = new GridBagConstraints();
c.insets = new Insets(10,10,10,10);
JTextField xField = new JTextField(5);
JTextField yField = new JTextField(5);
JTextField zField = new JTextField(5);
JButton ok = new JButton("ok");
JPanel myPanel = new JPanel(new GridBagLayout());
myPanel.add(new JLabel("x:"));
myPanel.add(xField,c);
myPanel.add(new JLabel("y:"));
myPanel.add(yField,c);
myPanel.add(new JLabel("z:"));
myPanel.add(zField,c);
c.gridy = 1;
ok.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent arg0) {
double x = Double.parseDouble(xField.getText());
double y = Double.parseDouble(yField.getText());
xField.setText(Double.toString(x));
xField.setText(Double.toString(y));
zField.setText(Double.toString(x*y));
}
});
c.gridx = 3;
c.gridy = 2;
c.insets = new Insets(10,0,10,10);
c.fill = GridBagConstraints.HORIZONTAL;
myPanel.add(ok, c);
add(myPanel);
setVisible(true);
pack();
this.setSize(330, 150);
this.setResizable(false);
}
}
public static void main(String[] args){
Solver s = new Solver();
}
}
答案 2 :(得分:0)
你需要的是一个关键的倾听者。看看这个java教程https://docs.oracle.com/javase/tutorial/uiswing/events/keylistener.html