当前位置: 首页 > 知识库问答 >
问题:

更改JTextField中的值侦听器

子车文康
2023-03-14

在我的代码中,如果用户在ComboBox 2中输入值,它将反映在TextField中,但是如果用户从ComboBox 1的下拉列表中选择,而不更改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);
    }
}

测试2。txt:1任何帮助都将不胜感激!

共有1个答案

潘兴朝
2023-03-14

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

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

除此之外,您应该向JComboBox添加类型参数,例如JComboBox

 类似资料:
  • 问题内容: 我希望消息框在用户更改文本字段中的值后立即显示。目前,我需要按Enter键才能弹出消息框。我的代码有什么问题吗? 任何帮助,将不胜感激! 问题答案: 将侦听器添加到为您自动创建的基础文档中。

  • 问题内容: 我希望在用户更改文本字段中的值后立即显示消息框。目前,我需要按Enter键才能弹出消息框。我的代码有什么问题吗? 任何帮助,将不胜感激! 问题答案: 将侦听器添加到为你自动创建的基础文档中。

  • 我做了一个程序,动态地从一个面板获取数据,但是我的代码需要用户点击输入按钮来更新数据。有没有一个更改监听器或其他监听器可以在任何时候更新Jtext field中的数据?谢谢!

  • 问题内容: 我想一种添加到我当过用户更改的,它的值,应用程序在控制台上打印的东西。 我进行了搜索,发现以下非常相似的问题:JTextField的值更改侦听器 提到的问题的答案非常清楚和有效,但是不幸的是,它仅对(Not )有用,因为它说您应该像这样使用DocumentListener: 但是在JavaFX的TextField中,您无法执行此操作。所以?解决办法是什么? (使用代码进行描述可能会很好

  • 我想在我的中添加一种,当用户更改的值时,应用程序会在控制台上打印一些内容。 我搜索了一下,发现了以下非常类似的问题:将Listener值更改为JTextField 上述问题的答案非常清晰有效,但不幸的是,它只对(而不是)有用,因为它说您应该像这样使用DocumentListener: 但在JavaFX的文本字段中,您无法执行此操作。所以解决办法是什么? (用代码描述可能非常好,但如果不可能,任何提

  • 嗨,我有一个很可能很愚蠢的问题。我刚开始玩弄属性和ChangeListener,但遇到了一个障碍。我知道,如果我创建了一个包含数组列表的对象属性,那么只有当数组列表本身发生变化时,任何ChangeListener才会启动。但是,如果出现以下情况,我希望所有ChangeListener都启动 阵列列表本身会更改 数组列表的长度会更改(即添加或删除元素) 将ArrayList中的元素更改为其他元素 数