Как я могу сделать событие для JComboBox, которое запускает ПОСЛЕ выбора? - PullRequest
2 голосов
/ 30 января 2012

Я хочу сделать событие, которое будет запущено после того, как я сделаю выбор в JComboBox.проблема, с которой я сейчас сталкиваюсь, заключается в том, что когда я добавил ActionListener, он срабатывал, когда пользователь нажимал на поле, но ДО того, как он фактически выбрал новый элемент, таким образом, слушатель действия был активирован все время на предыдущем выбранном значениив коробке.что я хочу сделать, это просто изменить заголовок JTextArea в соответствии с выбором.Я попытался сделать что-то вроде этого:

 jBox.addActionListener(new ActionListener(){
    @Override
    public void actionPerformed(ActionEvent e) {
    String alt = GetAlgoAreaTitleByChoice();
    panel.remove(jArea);
    currentBest = setArea("",alt);
    currentBest.setBounds(50, 350, 1000, 290);
    panel.add(jArea);
     }
     });

и метод внутри:

private String GetArgsAreaTitleByChoice(){
    String chi = jBox.getSelectedItem().toString();
    if(chi.equals(generalChoice)){
    return "Hello";
    }
    else if(chi.equals(algoChoice)){
    return "World";
    }
    else if(chi.equals(argsChoice)){
    return "Hello";
    }
    return null;
}

Я пытался использовать события SELECTED сейчас, как это:

public void itemStateChanged(ItemEvent e) {
JComboBox cb = (JComboBox)e.getSource();

    // Get the affected item
    String item = cb.getSelectedItem().toString();

    if (e.getStateChange() == ItemEvent.SELECTED) {
        panel.remove(jBox);
    textArea = setArea("", item);
        panel.add(jBox);
   }

но, кажется, удаляет область с панели, не добавляя ее обратно ... почему это происходит?

Ответы [ 2 ]

2 голосов
/ 30 января 2012

Вот простая демонстрация с примером кода:

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

public class Tester {

    public Tester(){

        JComboBox box = new JComboBox();
        box.addItem("One");
        box.addItem("Two");
        box.addItem("Three");


        box.addItemListener(new ItemListener(){
            public void itemStateChanged(ItemEvent e){

                if(e.getStateChange()==ItemEvent.SELECTED){

                    e.getItem();  //Do what ever you want :))

                }
            }
        });

        JFrame frame = new JFrame();
        frame.getContentPane().add(box);
        frame.pack();
        frame.setVisible(true);
    }

    public static void main(String [] args) {
        Tester tester = new Tester();
    }
}
2 голосов
/ 30 января 2012

Для прослушивания событий из лучше реализуется JComboBox ItemListener , возвращает два события SELECTED/DESELECTED

EDIT

если вы удалите / добавите JComponent (s) во время выполнения и в уже видимом контейнере, то вы должны вызвать (как минимум строки кода)

revalidate();
repaint();
...