簡體   English   中英

如何根據JComboBox選擇更改JTextField

[英]How to change a JTextField based on a JComboBox selection

這只是我為學校工作的一個愚蠢的計划,但我遇到了一些麻煩。 我有一個JComboBox,根據用戶選擇我想要更改文本字段。 然而,我遇到了一些麻煩,因為現在程序編譯並運行,但文本字段不會改變。 我發現很多人做了更復雜的事情,但我只需要一個簡單的解決方案。 這是代碼。 謝謝!

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class emocon extends JFrame implements ItemListener {
JPanel row1 = new JPanel();
JComboBox choose = new JComboBox();
JPanel row2 = new JPanel();
JTextField text = new JTextField(10);
//image will be displayed here
JPanel row3 = new JPanel();
JLabel pic = new JLabel();

//Images
ImageIcon happy = new ImageIcon("images/happy.gif");
ImageIcon lol = new ImageIcon("images/lol.gif");
ImageIcon winky = new ImageIcon("images/winky.gif");
ImageIcon sad = new ImageIcon("images/sad.gif");
ImageIcon worried = new ImageIcon("images/worried.gif");
ImageIcon angry = new ImageIcon("images/angry.gif");
ImageIcon shock = new ImageIcon("images/shock.gif");
ImageIcon uninpressed = new ImageIcon("images/uninpressed.gif");
ImageIcon yawn = new ImageIcon("images/yawn.gif");
ImageIcon evil = new ImageIcon("images/evil.gif");

public emocon(){
    setTitle("Emoticon Converter");
    setSize(350,350);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setVisible(true);

GridLayout two = new GridLayout(3,1);
setLayout(two);
 choose.addItem("Happy");
 choose.addItem("LOL");
 choose.addItem("Winky");
 choose.addItem("Sad");
 choose.addItem("Worried");
 choose.addItem("Angry");
 choose.addItem("Shock");
 choose.addItem("Uninpressed");
 choose.addItem("Yawn");
 choose.addItem("Evil");
choose.addItemListener(this);
row1.add(choose);
row2.add(text);
row3.add(pic); 
add(row1);
add(row2);
add(row3);

}
@Override
public void itemStateChanged(ItemEvent item) {
Object source = item.getSource();
String emo = source.toString();
if (emo == "Sad"){
    text.setText("hjgjhg");
}
}   
public static void main(String[] args) {
    emocon emo = new emocon();
}
}

你有一個問題:

if (emo == "Sad"){
    text.setText("hjgjhg");
}

不要使用==比較字符串。 請改用equals(...)equalsIgnoreCase(...)方法。 理解==檢查兩個對象是否相同而不是你感興趣的。另一方面,這些方法檢查兩個字符串是否具有相同順序的相同字符,這就是重要的。 而不是

if (fu == "bar") {
  // do something
}

做,

if ("bar".equals(fu)) {
  // do something
}

要么,

if ("bar".equalsIgnoreCase(fu)) {
  // do something
}

編輯

你的另一個問題是你剛從ItemEvent獲取源代碼。 源代碼是JComboBox ,而不是你想要的。 你需要獲得所選項目!

嘗試使用ItemEvent對象中可用的其他方法,而不是getSource()

獲取所選項目,如下所示:

String item = (String)jComboBox.getSelectedItem();
if(item.equals("Sad")){
    text.setText("hjgjhg");
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM