【问题标题】:change value listener in JTextFieldJTextField 中的更改值侦听器
【发布时间】:2015-05-10 08:01:18
【问题描述】:

在我的代码中,如果用户在 ComboBox 2 中输入值,它会反映在 TextField 中,但是 如果用户从 Combobox1 的下拉列表中选择而不更改值 在 ComboBox 2 中,Textfield 中的值保持不变。我想我做错了吗?

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.io.*;
import java.util.*;
import javax.swing.text.Document;

public class D extends JPanel {
    public D() {

        JPanel buttonPanel = new JPanel();
        add(buttonPanel);
        buttonPanel.setLayout(new GridLayout(0, 3, 5, 5));

        JTextField field11 = new JTextField(15);
        field11.setEditable(false);
        buttonPanel.add(field11);

        JTextField field12 = new JTextField(15);
        field12.setEditable(false);
        buttonPanel.add(field12);

        JComboBox comboBox1 = new JComboBox();
        comboBox1.addItem("1");
        comboBox1.addItem("2");
        comboBox1.addItem("3");

        JComboBox comboBox2 = new JComboBox();
        comboBox2.setEditable(true);

        comboBox1.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent event) {

                JComboBox comboBox1 = (JComboBox) event.getSource();
                JComboBox comboBox2 = (JComboBox) event.getSource();

                Object selected = comboBox1.getSelectedItem();
                if (selected.toString().equals("1")) {
                    field11.setText("10");
                    String cb3a = ((String) comboBox2.getSelectedItem());
                    double cb3b = Double.valueOf(cb3a);
                    String cb3aa = field11.getText();
                    double cb3bb = Double.parseDouble(cb3aa);
                    double cb3c = (cb3b * cb3bb);
                    String cb3d = String.valueOf(cb3c);
                    field12.setText(cb3d);
                   }
                else if (selected.toString().equals("2")) {
                    field11.setText("20");
                    String cb33a = ((String) comboBox2.getSelectedItem());
                    double cb33b = Double.valueOf(cb33a);
                    String cb33aa = field11.getText();
                    double cb33bb = Double.parseDouble(cb33aa);
                    double cb33c = (cb33b * cb33bb);
                    String cb33d = String.valueOf(cb33c);
                    field12.setText(cb33d);
                    }
                else if (selected.toString().equals("3")) {
                    field11.setText("30");
                    String cb333a = ((String) comboBox2.getSelectedItem());
                    double cb333b = Double.valueOf(cb333a);
                    String cb333aa = field11.getText();
                    double cb333bb = Double.parseDouble(cb333aa);
                    double cb333c = (cb333b * cb333bb);
                    String cb333d = String.valueOf(cb333c);
                    field12.setText(cb333d);
                  }

            }
        });


        comboBox2.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent event) {

                JComboBox comboBox2 = ((JComboBox) event.getSource());
                Object selected = comboBox1.getSelectedItem();

                if (selected.toString().equals("1")) {
                    String cb3a = ((String) comboBox2.getSelectedItem());
                    double cb3b = Double.valueOf(cb3a);
                    String cb3aa = field11.getText();
                    double cb3bb = Double.parseDouble(cb3aa);
                    double cb3c = (cb3b * cb3bb);

                    String cb3d = String.valueOf(cb3c);

                    field12.setText(cb3d);
                } else if (selected.toString().equals("2")) {
                    String cb33a = ((String) comboBox2.getSelectedItem());
                    double cb33b = Double.valueOf(cb33a);
                    String cb33aa = field11.getText();
                    double cb33bb = Double.parseDouble(cb33aa);
                    double cb33c = (cb33b * cb33bb);
                    String cb33d = String.valueOf(cb33c);
                    field12.setText(cb33d);
                } else if (selected.toString().equals("3")) {
                    String cb333a = ((String) comboBox2.getSelectedItem());
                    double cb333b = Double.valueOf(cb333a);
                    String cb333aa = field11.getText();
                    double cb333bb = Double.parseDouble(cb333aa);
                    double cb333c = (cb333b * cb333bb);
                    String cb333d = String.valueOf(cb333c);
                    field12.setText(cb333d);
                }

            }
        });

        buttonPanel.add(comboBox1);
        buttonPanel.add(comboBox2);

        try {
            InputStream ips = new FileInputStream("test2.txt");
            InputStreamReader ipsr = new InputStreamReader(ips);
            BufferedReader br = new BufferedReader(ipsr);
            String line;
            while ((line = br.readLine()) != null) {
                comboBox1.setSelectedItem(line);
            }
            br.close();
        } catch (Exception e) {
            e.printStackTrace();
        }

    }

    public static void main(String[] args) {
        D app = new D();
        JFrame m = new JFrame("D");
        m.getContentPane().add(app);
        m.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        m.pack();
        m.setVisible(true);
    }
}

test2.txt: 1 任何帮助将不胜感激!

【问题讨论】:

    标签: java swing listener jtextfield


    【解决方案1】:

    您只是在comboBox1 的ActionListener 中设置field11,field12 没有理由改变。当 JComboBox 更改时,只会执行相应的 ActionListener,而不是两者都执行。

    将您的计算放在一个单独的方法中,然后在 ActionListener 中设置这两个字段,这样它们都会改变。

    除此之外,您应该向 JComboBox 添加一个类型参数,例如JComboBox<Integer>。这样,您将不得不减少投掷。 GUI 应该在 EDT 上初始化。

    【讨论】:

    • 当用户在comboBox2中输入时,代码工作正常,计算反映在field12中,但是当comboBox2中保持相同的值时,用户更改comboBox1中的下拉菜单,然后field12的值不会改变。我该如何完成它
    • @user 我理解你的问题并在我的回答中说明了如何解决它......我不知道如何让它更清楚?!
    • 我已经尝试在combBox1的ActionListener中设置field11和field12,但这似乎也不起作用。你能帮帮我吗
    • @user 使用您的新代码,当我更改 comboBox1 时,两个 TextFields 都会更新...这不是您想要的吗?
    • 不,如果您看到我的代码,那么我希望将 combobox2 值与 textfield11 相乘,然后将其显示在 textfield12 中。但在这种情况下,combobox1 将与 textfield11 相乘并显示。
    猜你喜欢
    • 2011-04-26
    • 2021-05-23
    • 2014-03-21
    • 2013-03-23
    • 2012-12-27
    • 1970-01-01
    • 2011-07-23
    相关资源
    最近更新 更多