JCheckBox Standard MouseListener entfernen

Status
Nicht offen für weitere Antworten.

Mewel

Aktives Mitglied
Hoi,

ich möchte von einer JCheckBox/JToggleButton den MouseListener entfernen, der für das checked/nicht checked zuständig ist. Man soll die JCheckBox nicht mehr mit der Maus checken können (nur noch peer code). Hab schon einiges versucht, aber nix klappt so wirklich.
 

Zubi81

Aktives Mitglied
Wie wärs wenn Du die JCheckBox einfach deaktivierst. Der Zustand kann dann nicht mehr über die Maus verändert werden, aber über z.B. einen Button kannst Du die Box weiterhin ansteuern.

Code:
final JCheckBox box = new JCheckBox("State");
box.setEnabled(false);
JButton button = new JButton(new AbstractAction("Enable/Disable") {
  
  private static final long serialVersionUID = 7961054013653375370L;

  public void actionPerformed(ActionEvent e) {
    box.setSelected(!box.isSelected());
  }
    
});
 

Mewel

Aktives Mitglied
hehe, nene das geht nicht, ich schreibe einen gui builder, einfach enabeld auf false stellen bringt mir nix :).
 

Zubi81

Aktives Mitglied
Die einzige Möglichkeit die ich noch sehe ist dass Du die Methode AbstractButton#createChangeListener() überschreibst. Aber wenn Du ein GUI Builder programmierst wird Dir dies evtl. auch nicht weiterhelfen?

Code:
/**
  * ES HANDELT SICH HIERBEI UM EINEN HACK!!!!!!! 
  */
public static class DoNothingJCheckBox extends JCheckBox {
  
  private static final long serialVersionUID = -5259327954127164344L;

  public DoNothingJCheckBox(String text) {
    super(text);
  }
  
  @Override
  protected ChangeListener createChangeListener() {
    return new ChangeListener() {
      
      public void stateChanged(ChangeEvent e) {
        // do nothing
      }
    
    };
  }
  
}

Die Methode AbstractButton#createChangeListener() wrapped die Methode AbstractButton#getHandler(), diese Methode wird auch noch von den Methoden #createActionListener() und #createItemListener() verwendet. Du müsstest halt schauen, ob Du diese überschreiben müsstest? Ich habe nicht jeden Use Case getestet.
 

Zubi81

Aktives Mitglied
Achtung: Das Feld wird mit dieser Lösung nicht mehr automatisch neu gezeichnet wenn sich der Zustand ändert.

Man müsste noch die Methode #setSelected(boolean) überschreiben:
Code:
  @Override 
  public void setSelected(boolean b) {
    
    super.setSelected(b);

    // AbstractButton#updateMnemonicProperties() ist private !!?
    fireStateChanged();
    repaint();
    
  }

Siehe auch AbstractButton#Handler...
 

Mewel

Aktives Mitglied
So hab das gerade nochmal versucht und klappt irgendwie nicht, auch das überschreiben von createActionListener oder createItemListener hat keinen Effekt. Noch irgendeine andere Idee?

Dachte ja das Event geht über das ButtonModel (ToggleButtonModel) aber komme da auch nicht weiter.
 
B

Beni

Gast
Du könntest ein unsichtbares Panel über die Checkbox legen.
Code:
	public class GlassPane extends JPanel{
		public GlassPane(){
			setOpaque( false );
		}
Wenn du ein JLayeredPane benutzt, kannst du das Layout einfach aufbauen. Und wenn du diesem GlassPane einen MouseListener hinzufügst, sollte dieser MouseListener alle Events abfangen und verschlucken.
 

Mewel

Aktives Mitglied
Die Idee ist sehr gut Beni, leider kann ich JLayerdPane ohne sehr viel an meinem Code umzuschreiben nicht nutzen. Vom Prinzip würde es sehr wahrscheinlich funktionieren aber es sträubt sich innerlich in mir wenn ich an die Änderungen denke :/.
 

Zubi81

Aktives Mitglied
Mewel hat gesagt.:
...ohne sehr viel an meinem Code umzuschreiben nicht nutzen...

Tja Dein Vorhaben geht ziemlich sicher nicht ohne dass Du Deinen Code umschreiben musst.

Ich bin gerade am Arbeitsplatz (immer diese Sonntagsarbeiten), daher keinen Zugriff auf meine persönliche Daten. Ich habe aber meinen Lösungsvorschlag ausprobiert und dieser hat wunderbar funktioniert. Falls ich heute Abend dran denke, werde ich den Code posten.
 

Mewel

Aktives Mitglied
Umschreiben ja, aber mein ganzes Konzept überarbeiten ist etwas schwierig. Ich arbeite momentan nicht wirklich an dem Projekt, ging nur um ein paar Bugfixes wo das dazugehört.

Würde mich freuen wenn dein Lösungsvorschlag doch funktioniert :).
 

Zubi81

Aktives Mitglied
Ich stelle gerade fest, dass mein Vorschlag nur zur Hälfte funktioniert. Sorry. Obwohl ich die Methoden überschrieben habe, ändert sich der Zustand der JCheckBox, wenn auch nicht ersichtlich. Dies kommt in meinem Beispiel dann zur Geltung, wenn ich auf die JCheckBox klicke und anschliessend den Button betätige. Naja, ich habs ja auch als nicht vollständig funktionierenden Hack deklariert.
 

Zubi81

Aktives Mitglied
Ich glaub ich habs. Die Lösung war so nahe liegend..., dass es schon fast peinlich ist. Wie wäre es mit einem eigenen ButtonModel. Wir überschreiben die #setSelected(boolean) Methode und überprüfen, ob es sich um einen Mausklick oder nicht handelt.

Code:
final JCheckBox box = new JCheckBox("State");
box.setModel(new DefaultButtonModel() {

  private static final long serialVersionUID = 5259327923427164344L;

  @Override
  public void setSelected(boolean b) {
    if (!isArmed()) {
      super.setSelected(b);
    }
  }

});

http://java.sun.com/j2se/1.4.2/docs/api/javax/swing/ButtonModel.html
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
J Falsches Rendern durch JCheckBox in eigenem JTree AWT, Swing, JavaFX & SWT 6
C JCheckBox disabled text color AWT, Swing, JavaFX & SWT 9
S JRadioButton und JCheckBox im JTree AWT, Swing, JavaFX & SWT 14
B JCheckBox ausrichten ? AWT, Swing, JavaFX & SWT 1
Paul15 JCheckBox und JToggleButton AWT, Swing, JavaFX & SWT 5
M Swing JCheckbox Namen vergeben? AWT, Swing, JavaFX & SWT 5
E Zustand der JCheckBox abfragen AWT, Swing, JavaFX & SWT 1
D JCheckbox und JSpinner in JTable AWT, Swing, JavaFX & SWT 9
K Swing JCheckbox ändern AWT, Swing, JavaFX & SWT 3
N ChangeListener und jCheckBox AWT, Swing, JavaFX & SWT 3
B JTable inkl. JCheckbox AWT, Swing, JavaFX & SWT 5
StrikeTom JCheckBox in JTable AWT, Swing, JavaFX & SWT 6
A Swing JCheckbox transparent machen AWT, Swing, JavaFX & SWT 7
G Swing JCheckBox, setEnabled(false) und HTML Text Problem AWT, Swing, JavaFX & SWT 5
Z Swing JCheckBox in einer JTable AWT, Swing, JavaFX & SWT 8
B JCheckbox ja oder nein AWT, Swing, JavaFX & SWT 3
O Jcheckbox Status nachträglich abfragen AWT, Swing, JavaFX & SWT 2
C Swing JCheckBox setEditable(false)? AWT, Swing, JavaFX & SWT 9
X Swing JCheckbox in JTable AWT, Swing, JavaFX & SWT 6
F DefaultTableCellRenderer blendet JCheckBox aus AWT, Swing, JavaFX & SWT 4
Burny91 Swing JCheckBox in JList einbetten AWT, Swing, JavaFX & SWT 4
K JCheckBox datenstruktur AWT, Swing, JavaFX & SWT 10
J Swing JCheckBox enabled, aber graues Kästchen AWT, Swing, JavaFX & SWT 2
S Swing Problem mit JCheckBox auf JPanel in JScrollPane AWT, Swing, JavaFX & SWT 8
C JCheckBox Kreuz statt Haken AWT, Swing, JavaFX & SWT 7
S Swing Werte einer Jcheckbox aus eine Klasse A in eine Klasse B aufrufen AWT, Swing, JavaFX & SWT 6
S GUI blocked after checked a JcheckBox AWT, Swing, JavaFX & SWT 2
S JCheckBox Paint AWT, Swing, JavaFX & SWT 7
M JCheckBox Icon anpassen AWT, Swing, JavaFX & SWT 2
E Matrix mit JCheckBox AWT, Swing, JavaFX & SWT 29
Balbes Änderung des Wertes von JCheckBox in einer JTable AWT, Swing, JavaFX & SWT 4
S Frage zu JCheckBox AWT, Swing, JavaFX & SWT 2
T Swing JCheckBox: Wie getState() abfragen? AWT, Swing, JavaFX & SWT 2
FoolMoon Swing JCheckBox neben Text in einer Tabelle AWT, Swing, JavaFX & SWT 2
J Icon einer JCheckBox AWT, Swing, JavaFX & SWT 6
E Swing Wechsel in JCheckBox abfangen AWT, Swing, JavaFX & SWT 10
S JCheckBox AWT, Swing, JavaFX & SWT 9
D JTable - JCheckbox und Renderer AWT, Swing, JavaFX & SWT 2
V JCheckBox in JTable AWT, Swing, JavaFX & SWT 3
T JCheckBox deselektieren (Haken wieder entfernen) - wie? AWT, Swing, JavaFX & SWT 5
W JRadioButton / JCheckBox problem AWT, Swing, JavaFX & SWT 6
K JCheckBox in einer JTable auswählbar machen AWT, Swing, JavaFX & SWT 2
J Listener erkennt Deselektierung von JCheckbox nicht AWT, Swing, JavaFX & SWT 13
T Dynamische Anpassung einer jCheckBox AWT, Swing, JavaFX & SWT 11
T JCheckBox ohne "Box"? AWT, Swing, JavaFX & SWT 6
H JCheckBox - Ist die Abfrage wirklich so umständlich ? AWT, Swing, JavaFX & SWT 3
A Problem der Größe von JCheckBox nach Hinzufügen eines Popups AWT, Swing, JavaFX & SWT 2
F Wie Item Listener zu JCheckBox(in JTable) hinzufügen? AWT, Swing, JavaFX & SWT 6
M JCheckbox, das selektieren verhindern AWT, Swing, JavaFX & SWT 9
A JCheckBox abfragen AWT, Swing, JavaFX & SWT 6
J Variabler VariablenIdentifier - JCheckBox AWT, Swing, JavaFX & SWT 9
I JTree und JCheckbox Problem AWT, Swing, JavaFX & SWT 4
G jCheckBox AWT, Swing, JavaFX & SWT 8
G JMenu problem mit der Breite von einer JCheckBox AWT, Swing, JavaFX & SWT 2
D Seltsamer Rahmen bei JCheckBox AWT, Swing, JavaFX & SWT 7
G JCheckBox mit Text und Icon AWT, Swing, JavaFX & SWT 5
M JCheckbox in JCombobox AWT, Swing, JavaFX & SWT 7
L jCheckBox - aktiviert und nicht aktiviert AWT, Swing, JavaFX & SWT 7
H jCheckBox abschalten AWT, Swing, JavaFX & SWT 3
B JTextFiled, JCheckBox, JSpinner Eigenschaften speichern AWT, Swing, JavaFX & SWT 2
G JCheckbox Buttongroup Problem AWT, Swing, JavaFX & SWT 7
P JCheckBox: das 4eck mit kreuz soll rechts vom wort stehen AWT, Swing, JavaFX & SWT 3
R JCheckBox mit Image und Text AWT, Swing, JavaFX & SWT 5
G JCheckBox nicht änderbar machen AWT, Swing, JavaFX & SWT 2
V Statusabfrage von JCheckBox und JComboBox AWT, Swing, JavaFX & SWT 7
P JCheckBox AWT, Swing, JavaFX & SWT 4
L Probleme mit JCheckBox AWT, Swing, JavaFX & SWT 15
A JButton und JCheckBox im JTree reagieren nicht AWT, Swing, JavaFX & SWT 13
J JCheckBoxMenuItem und JCheckBox synchronisieren AWT, Swing, JavaFX & SWT 6
D Welche JCheckBox des Arrays ist das? AWT, Swing, JavaFX & SWT 2
P JCheckbox einmal gewählt immer gewählt ? AWT, Swing, JavaFX & SWT 2
M Weiße JCheckBox? AWT, Swing, JavaFX & SWT 5
S Herausbekommen welche JCheckBox selectiert wurde AWT, Swing, JavaFX & SWT 6
Neumi5694 Sprache der Standard-Buttons AWT, Swing, JavaFX & SWT 7
R Standard-Symbole AWT, Swing, JavaFX & SWT 6
V Bestellungsverwaltung nach MVC-Standard AWT, Swing, JavaFX & SWT 6
G Welcher Teil der Java Standard Edition API ist für das Zeichnen von einfachen Grafiken gedacht? AWT, Swing, JavaFX & SWT 3
B Standard Icons wo findet man diese? AWT, Swing, JavaFX & SWT 20
G Frame,Font,Standard,Schriftart,JFrame AWT, Swing, JavaFX & SWT 3
Daniel_L Actionmap - Standard-Actions? AWT, Swing, JavaFX & SWT 2
T Standard Icons AWT, Swing, JavaFX & SWT 7
Steev Standard Design bei JFrame und AWT AWT, Swing, JavaFX & SWT 7
K Windows Style als standard? AWT, Swing, JavaFX & SWT 2
DEvent Standard Font-Auswahl-Dialog? AWT, Swing, JavaFX & SWT 15
C Textfield Background auf Standard zurücksetzen AWT, Swing, JavaFX & SWT 2
A JLabel – Standard Rahmen soll unterdruckt werden AWT, Swing, JavaFX & SWT 2
G standard blau (windows) != color.blue AWT, Swing, JavaFX & SWT 2
D Standard Email Client starten AWT, Swing, JavaFX & SWT 8
M Look and Feel Standard AWT, Swing, JavaFX & SWT 5
G standard system icons AWT, Swing, JavaFX & SWT 1
H Viele ActionListener (MouseListener) - Performance AWT, Swing, JavaFX & SWT 24
ExceptionOfExpectation MouseListener-Objekte zu den Graphics-Objekten einfügen AWT, Swing, JavaFX & SWT 3
R Punkt von MouseListener hat falsche Koordinate AWT, Swing, JavaFX & SWT 2
J MouseListener wird nicht ausgeführt. AWT, Swing, JavaFX & SWT 4
S Swing Rechteck über JTable zeichnen (per MouseListener) AWT, Swing, JavaFX & SWT 1
G vorgefertigte Buttons oder neue Komponente mit MouseListener? AWT, Swing, JavaFX & SWT 0
F ListCellRenderer mit JLabel und MouseListener AWT, Swing, JavaFX & SWT 4
D Event Handling MouseListener funktioniert seit Java 8 nicht mehr AWT, Swing, JavaFX & SWT 13
M MouseListener auf table oder scrollPane AWT, Swing, JavaFX & SWT 11
B Event Handling MouseListener Behält seine Variablen, auch wenn ich ein neus Objekt erstelle AWT, Swing, JavaFX & SWT 2

Ähnliche Java Themen

Neue Themen


Oben