JCheckBox als JLabel

Status
Nicht offen für weitere Antworten.
B

Bash

Gast
Hi zusammen,

ich will ein reines Anzeige-Panel basteln, in dem JLabels, JTextAreas usw nicht editierbar angezeigt werden.
Unter anderem sollen boolsche Werte als JCheckBox dargestellt werden.
Aber wenn ich eine JCheckBox disable, dann wird sie natürlich gegraut angezeigt.
Sieht bescheuert aus.

Hab versucht einen MouseListener dran zu hängen, kann die Events aber nicht mit consume blockieren.
Die Farbe der disableten CheckBox kann man scheinbar nicht einstellen, oder?
Wie kann ich
- die Events in den Müll schicken, oder
- ein JLabel so konfigurieren, dass es wie eine JCheckBox aussieht oder
- sonst wie einen Boolschen Wert nicht editierbar als normale CheckBox darstellen?

Mit JLayeredPane würd´s gehen, aber da handel ich mir mehr (Layout-)Nachteile als Vorteile ein.

Bin der Verzweiflung nahe.
Das muss doch ganz einfach gehen.
Kann´s mir jemand sagen?

Gruß,
Basch
 

dotlens

Top Contributor
lass di events sein und arbeite nicht mit disable sondern mit setSelected();

Code:
JCheckBox cb = new JCheckBox();
cb.setSelected(false);
 
B

Bash

Gast
@dotlens: Danke für die Antwort, aber das hilft mir nicht.

Dass ich setSelected machen muss ist klar.

Aber wie kann ich das Ding _sperren_, ohne dass es ausgegraut wird?
 

meez

Top Contributor
Mach eine eigene Klasse, und übersteuere den Event:

Code:
import javax.swing.JCheckBox;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;

public class MyCheckBox extends JCheckBox {
	private boolean selected;
	public MyCheckBox(String text, boolean selected) {
		super(text, selected);
		this.selected= selected;
		addChangeListener(new ChangeListener() {
			public void stateChanged(ChangeEvent evt) {
				setState();
			}
		});
	}
	private void setState() {
		super.setSelected(selected);
	}
}
 

hugo

Bekanntes Mitglied
dotlens hat gesagt.:
lass di events sein und arbeite nicht mit disable sondern mit setSelected();

Code:
JCheckBox cb = new JCheckBox();
cb.setSelected(false);
Ich glaube das er hat er auch noch selbst hinbekommen. Er meint, wie er verhindern kann, dass man eine Checkbox per Mausclick verändert und trotz die Änderung per Script möglich bleibt.

bash hat gesagt.:

Das klingt doch gar nicht so schlecht. Warum machst du dir nicht eine eigene Checkbox, die von JCheckbox erbt und überschreibtst die Methode configurePropertiesFromAction(Action a).

[edit] Da war ich wohl zu langsam :shock:
 
B

Bash

Gast
@meez: Danke für den Vorschlag. Das kommt schon näher an mein Problem ran:
Der Wert der CheckBox ändert sich nicht.

Das ist aber leider immer noch nicht die Lösung, die ich suche.
Den gleichen Effekt hab ich schon mal erreicht, indem ich einen ActionListener an das Objekt dran gehängt hab.

Mich stört, dass die JCheckBox auf Maus und Taste immer noch reagiert. Auch wenn der Wert sich nicht ändert.

Ich bin vielleicht zu schleckig:
Die JCheckBox soll überhaupt nicht reagieren. Als ob sie ein JLabel wäre.
 
B

Beni

Gast
Eine Variante ist eine Component zu zeichnen, welche nur wie eine Checkbox aussieht, in wirklichkeit aber keine ist:

Code:
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

import javax.swing.JCheckBox;
import javax.swing.JComponent;
import javax.swing.JFrame;


public class Test5 extends JFrame{
	public static void main( String[] args ){
		Test5 t = new Test5();
		t.add( new CheckboxLabel( "Hallo", true ) );
		t.pack();
		t.setLocationRelativeTo( null );
		t.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
		
		t.addWindowListener( new WindowAdapter(){
			public void windowClosing(WindowEvent e){
				System.exit( 0 );
			}
		});
		
		t.setVisible( true );
	}
	
	public Test5(){
		
	}
}

class CheckboxLabel extends JComponent{
	private JCheckBox box = new JCheckBox();
	
	public CheckboxLabel(){
		add( box );
		box.setFocusable( false );
		invalidate();
	}
	
	public CheckboxLabel( String text, boolean selected ){
		this();
		setText( text );
		setSelected( selected );
	}
	
	public void setText( String text ){
		box.setText( text );
		repaint();
	}
	
	public void setSelected( boolean selected ){
		box.setSelected( selected );
		repaint();
	}
	
	public Dimension getMinimumSize() {
		return box.getMinimumSize();
	}
	
	public Dimension getMaximumSize() {
		return box.getMaximumSize();
	}
	
	public Dimension getPreferredSize() {
		return box.getPreferredSize();
	}
	
	public void paint( Graphics g ){
		box.paint( g );
	}
	
	public void doLayout() {
		box.setBounds( 0, getHeight(), getWidth(), getHeight() );
	}
}
 

dotlens

Top Contributor
Bash hat gesagt.:
@dotlens: Danke für die Antwort, aber das hilft mir nicht.

Dass ich setSelected machen muss ist klar.

Aber wie kann ich das Ding _sperren_, ohne dass es ausgegraut wird?

sorry bin heut nich so schnell, sorry :oops:

also das mit dem glassPane hilft nichts, glassPane reagiert auch auf evente...

würde mir auch selbst eine CheckBox zeichnen wie es schon Beni gezeigt hat...
 

meez

Top Contributor
Warum nimmst du denn nicht einfach ein label, und papst da einen Haken als Icon drauf?
Warum überhaupt die Checkbox?
 
G

Guest

Gast
@hugo:
hugo hat gesagt.:
Ich glaube das er hat er auch noch selbst hinbekommen.
Danke für das Vertrauen :wink:

hugo hat gesagt.:
Das klingt doch gar nicht so schlecht. Warum machst du dir nicht eine eigene Checkbox, die von JCheckbox erbt und überschreibtst die Methode configurePropertiesFromAction(Action a).
Hört sich gut an. Aber das muss ich mir doch erst mal angucken. Hab ich bisher noch nicht benutzt. Ich komm vielleicht noch mal drauf zurück.

@Andy: Glass pane gibt´s leider nur bei der Root pane, nicht bei JInternalFrame usw., wenn ich das richtig sehe.

@Beni: Super! Das isses.
Bei mir kam zwar ein kleiner Fehler, aber nachdem ich t.add(new ...) durch t.getContentPane().add(new ...) ersetzt hab, war ich glücklich!
Code muss ich mir noch ein bisschen genauer angucken.

Danke!
 
B

Bash

Gast
@dotlens: Bin auch nicht der Schnellste und manchmal vergess ich sogar meinen Namen. :oops:

@meez:
meez hat gesagt.:
Warum nimmst du denn nicht einfach ein label, und papst da einen Haken als Icon drauf?
Warum überhaupt die Checkbox?
CheckBox, weil man in anderen Panels diese Werte mit einer CheckBox setzt. Konsistenz.
Keine Icons, weil die CheckBox nicht in jeder Java-Version gleich aussehen muss, d.h. Lösung ist mir nicht allgemein genug.

Wie gesagt: Die Lösung von Beni kann genau das, was ich gesucht hab.
Noch mal danke!
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
P jCheckBox auf der zusammengeknüpften Programmierung anzeigen lassen Allgemeine Java-Themen 3
F Swing Verkaufspreisberechnung JCheckBox Allgemeine Java-Themen 7
MQue JCheckBox in JTree Allgemeine Java-Themen 2
C Uebergabe von Objekten nach anklicken von JCheckBox Allgemeine Java-Themen 5
Mozart53 JLabel nur meinen Text verschieben ohne Image Allgemeine Java-Themen 3
Y Warum wird das JLabel falsch verschoben? Allgemeine Java-Themen 1
heinz ketchup String im JLabel ausgeben und erneuern Allgemeine Java-Themen 6
F JLabel nach 5 Sekunden wieder leeren Allgemeine Java-Themen 7
gamebreiti Swing JLabel wird nicht angezeigt Allgemeine Java-Themen 4
Q JLabel Textausgabe funktioniert nicht Allgemeine Java-Themen 4
A Klassen und JLabel's Allgemeine Java-Themen 12
S JLabel auf JPanel Allgemeine Java-Themen 10
D JLabel in (int) Array Allgemeine Java-Themen 8
JAVAnnik Bilder in JLabel Array einfügen Allgemeine Java-Themen 2
X Kann JLabel in JFrame nicht aktualisieren Allgemeine Java-Themen 3
T Edit: JLabel+MouseListener oeffnet mehrere Instanzen Allgemeine Java-Themen 5
N Jlabel automatisch anpassen Allgemeine Java-Themen 3
H image in jtextarea/JLabel einbinden... Allgemeine Java-Themen 4
M Escape Sequence in JLabel Allgemeine Java-Themen 4
L JLabel um 90 Grad drehen Allgemeine Java-Themen 6
T ImageIcon und JLabel Allgemeine Java-Themen 16
D JLabel aktualisieren Allgemeine Java-Themen 4
N KeyEvent / JLabel Allgemeine Java-Themen 5
E Image auf einem JLabel darstellen Allgemeine Java-Themen 3
E Pixelweise auf einem JPanel/JLabel o.ä. zeichnen Allgemeine Java-Themen 4
S JLabel Allgemeine Java-Themen 2
B Text von JLabel wird nicht aktualisiert Allgemeine Java-Themen 5
M ein JLabel in einem JLabel? Allgemeine Java-Themen 3
M JLabel an Textlänge anpassen / Textlänge in pixel Allgemeine Java-Themen 3
sliwalker JLabel-"Synchronisations"-Problem Allgemeine Java-Themen 7
G Html Link in einem JLabel? Allgemeine Java-Themen 3

Ähnliche Java Themen

Neue Themen


Oben