[英]change value listener in JTextField
在我的代碼中,如果用戶在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任何幫助將不勝感激!
您僅在comboBox1的ActionListener中設置field11,沒有理由更改field12。 更改JComboBox時,將僅執行相應的ActionListener,而不是同時執行。
將您的計算放在單獨的方法中,然后在ActionListener中設置兩個字段,因此它們都將更改。
除此之外,您應該向JComboBox添加類型參數,例如JComboBox<Integer>
。 這樣,您將需要減少投放。 GUI應該在EDT上初始化。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.