2016-05-19 10 views
0

ich einen Umschaltknopf und ich setzen ihren Zustand alsJava Umschaltknopf Ereignis nicht ausgelöst, wenn Auswahl erfolgt aber gefeuert, wenn die Maus schwebte

folgt
public void setSizeFeet(boolean enabled) { 
     this.size_tb.setSelected(enabled); 

    } 

Ich habe Hörer

size_tb.addChangeListener(new javax.swing.event.ChangeListener() { 
     public void stateChanged(javax.swing.event.ChangeEvent evt) { 
      size_tbStateChanged(evt); 
     } 
    }); 
private void size_tbStateChanged(javax.swing.event.ChangeEvent evt) {          
    if (size_tb.isSelected()){ 
      size_tb.setText("Feet"); 
     } else { 
      size_tb.setText("Meters"); 
     } 
}  

Das Problem, das wenn ich den Zustand setze, der die erste Methode aufruft. Nichts passiert. Wenn Sie die Maus jedoch über die Schaltfläche bewegen, wird der korrekte Text angezeigt. Ich habe eine Pause gemacht, und mir ist aufgefallen, dass das Ereignis nur ausgelöst wird, wenn ich die Maus über den Knopf halte. Sollte es nicht, wenn die Auswahl eingestellt ist, oder wenn es per Mausklick nicht schweben ist)

Dank

+0

Wie kann es möglich sein? hört sich komisch an. Der Umschaltknopf sollte einen Maus-Listener haben, um dies zu tun. – ziLk

+0

'ChangeListener' wird benachrichtigt, wenn das interne Modell geändert wird. Wenn Sie den Mauszeiger über die Schaltfläche bewegen, wird seine Rollover-Eigenschaft geändert, sodass Sie das Ereignis erhalten. –

Antwort

3

Verwenden Action:

new JToggleButton().addActionListener(new ActionListener() { 
    @Override 
    public void actionPerformed(ActionEvent e) { 
     JToggleButton tBtn = (JToggleButton)e.getSource(); 
     if (tBtn.isSelected()) { 
      System.out.println("button selected"); 
     } else { 
      System.out.println("button not selected"); 
     }   
    } 
}); 

Alternativ können Sie die ItemListener verwenden:

ItemListener itemListener = new ItemListener() { 
    public void itemStateChanged(ItemEvent itemEvent) { 
    int state = itemEvent.getStateChange(); 
    if (state == ItemEvent.SELECTED) { 
     System.out.println("Selected"); 
    } else { 
     System.out.println("Deselected"); 
    } 
    } 
}; 
+0

Ich habe versucht, das Ereignis nur generiert, wenn Sie auf die Schaltfläche nicht klicken, wenn Sie setSelected – Snake

+0

@Snake Haben Sie den ItemListener versucht? – tak3shi

+0

Ich habe das nicht versucht. Danke. Ich werde es akzeptieren, wenn nicht anders gefunden :) – Snake

Verwandte Themen