如何使JTextField更改其他基于盒装的输入

时间:2018-02-12 02:33:37

标签: java swing jtextfield auto-update

我正在尝试编写一个代码,其中弹出三个字段,它将乘以前两个输入并自动更新第三个字段,并在输入值时更改最后一个字段的值和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冲突,也将非常感激。)

3 个答案:

答案 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