Skip to main content

How can i make an event to a JComboBox which triggers AFTER selection?



I want to make an event which will be triggered after i make the selection to the JComboBox. the problem I'm now facing is that when i added an ActionListener, it was triggered when the user clicked on the box but BEFORE he actually chose the new item, thus the action listener was activated all the time on the previous value which was selected in the box. what i want to do is simply changing the title of an JTextArea according to the selection. I tried doing something like this:







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);

}

});







and the method inside:







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;

}







I've tried using the SELECTED events now like this:







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);

}







but it seems to remove the area from the panel without adding it back... why is this happening?


Comments

  1. For listening of events from JComboBox is better implements ItemListener, returns two events SELECTED/DESELECTED

    EDIT

    if you remove/add JComponent(s) on Runtime and in already visible container, then you have to call (as least code lines)

    revalidate();
    repaint();

    ReplyDelete
  2. Here is a simple demonstration with a sample code :

    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();
    }
    }

    ReplyDelete

Post a Comment

Popular posts from this blog

Slow Android emulator

I have a 2.67 GHz Celeron processor, 1.21 GB of RAM on a x86 Windows XP Professional machine. My understanding is that the Android emulator should start fairly quickly on such a machine, but for me it does not. I have followed all instructions in setting up the IDE, SDKs, JDKs and such and have had some success in staring the emulator quickly but is very particulary. How can I, if possible, fix this problem?

CCNA 3 Final Exam => latest version

1 . Which security protocol or measure would provide the greatest protection for a wireless LAN? WPA2 cloaking SSIDs shared WEP key MAC address filtering   2 . Refer to the exhibit. All trunk links are operational and all VLANs are allowed on all trunk links. An ARP request is sent by computer 5. Which device or devices will receive this message? only computer 4 computer 3 and RTR-A computer 4 and RTR-A computer 1, computer 2, computer 4, and RTR-A computer 1, computer 2, computer 3, computer 4, and RTR-A all of the computers and the router   3 . Refer to the exhibit. Hosts A and B, connected to hub HB1, attempt to transmit a frame at the same time but a collision occurs. Which hosts will receive the collision jamming signal? only hosts A and B only hosts A, B, and C only hosts A, B, C, and D only hosts A, B, C, and E   4 . Refer to the exhibit. Router RA receives a packet with a source address of 192.168.1.65 and a destination address of 192.168.1.161...