2013-05-15 5 views
1

Это просто глупая программа, над которой я работаю, но у меня проблемы. У меня есть JComboBox и на основе того, что пользователь выбирает, я хочу изменить текстовое поле. У меня есть некоторые проблемы с этим, однако, поскольку он стоит сейчас, программа компилируется и запускается, но текстовое поле не изменяется. Я нашел множество примеров людей, занимающихся гораздо более сложными вещами, но мне просто нужно простое решение. Вот код. Благодаря!Как изменить JTextField на основе выбора 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(); 
} 
} 
+0

1) Используйте последовательный и логический отступ для кодовых блоков. Отступ кода предназначен для того, чтобы помочь людям понять поток программы. 2) Чтобы получить более эффективную помощь, опубликуйте [SSCCE] (http://sscce.org/). –

ответ

3

У тебя проблема:

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 
} 

EDIT

Ваш Другая проблема заключается в том, что вы только источник из ItemEvent. Источником является JComboBox, а не то, что вы хотите. Вам нужно получить выбранный элемент!

Попробуйте использовать другой метод, доступный в объекте ItemEvent, а не getSource().

+0

Спасибо за вашу помощь, было то, чего я не знал. К сожалению, он по-прежнему не менял текстовое поле. Любые другие советы? благодаря! – Rostro

+0

@ Rostro: см. Править. Вы должны сделать отладку для этого, например, распечатать emo через println (...), чтобы узнать, что это на самом деле. –

+0

Я пытаюсь найти несколько разных методов: http: //docs.oracle.com/javase/6/docs/api/java/awt/event/ItemEvent.html. Я распечатал emo, и я получил строку для каждого элемента в combobox. Я считаю, что это то, чего я хочу, поэтому я не уверен, почему это не сработает. Благодаря! – Rostro

1

Получить выбранный элемент, как это:

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

Благодарю вас за помощь. На боковой ноте в строке 2 отсутствуют закрывающие круглые скобки. Когда я запускаю программу, я получаю эту ошибку «нестатический метод getSelectedItem() нельзя ссылаться на статический контекст« Спасибо! – Rostro

+0

@Rostro, ошибка довольно ясна, используйте код в нестационарном методе, ваш jcombobox не является статичным. – rimero

+0

@Rostro: Вам не нужно это делать. Снова просто используйте метод getEtem() 'ItemEvent, как я уже говорил ранее. Это все в ItemEvent. –

Смежные вопросы