Swing Checkboxen in Einträgen des Typs DefaultMutableTreeNode

SilencerandLois

Aktives Mitglied
Hallo,
ich habe folgendes Problem: Aktuell habe ich in Swing meinen Baum aus Knoten des Typs DefaultMutableTreeNode erstellt.

Nun möchte ich meine Einträge, welche aktuell nur als String repräsentiert werden, um eine Checkbox erweitern (vgl. Anhang).

Ist das in Swing ohne weiteres möglich?

Sollte die Beschreibung zu ungenau sein, gebt mir bitte bescheid, dann kann ich noch mehr darüber schreiben.

Besten Dank für Eure Tipps!

lg
Martin
 

Anhänge

  • Image.jpg
    Image.jpg
    47 KB · Aufrufe: 68

Michael...

Top Contributor
Nun möchte ich meine Einträge, welche aktuell nur als String repräsentiert werden, um eine Checkbox erweitern (vgl. Anhang).

Ist das in Swing ohne weiteres möglich?
Für die Repräsentation von Knoten einens JTrees sind TreeCellRenderer verantwortlich. Anmerkung: Bei der Darstellung der Knoten handelt es sich nur um eine gerenderte Darstellung von Komponenten

Hier mal ein Beispiel aus meiner Sammlung inkl. der Möglichkeit die "CheckBoxen" zu editieren. Das Editieren ist hier über einen MouseListener gelöst:
Java:
package demo;

import java.awt.Component;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.JTree;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeCellRenderer;
import javax.swing.tree.TreePath;
 
public class TreeCheckBoxDemo extends JFrame{
 
    public static void main(String[] args) {        
        TreeCheckBoxDemo treeFrame = new TreeCheckBoxDemo();
        treeFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        treeFrame.setBounds(0, 0, 300, 300);
        treeFrame.setLocationRelativeTo(null);
        treeFrame.setVisible(true);
    }
    
    private JTree tree;
    
    public TreeCheckBoxDemo() {
        DefaultMutableTreeNode rootNode = new DefaultMutableTreeNode("Root");
        DefaultMutableTreeNode node = new DefaultMutableTreeNode("Kategorie 1");
        node.add(new DefaultMutableTreeNode(new CheckObject("Unterkategorie 1", false)));
        node.add(new DefaultMutableTreeNode(new CheckObject("Unterkategorie 2", true)));
        node.add(new DefaultMutableTreeNode(new CheckObject("Unterkategorie 3", false)));
        rootNode.add(node);
        
        node = new DefaultMutableTreeNode("Kategorie 2");
        node.add(new DefaultMutableTreeNode(new CheckObject("Unterkategorie 4", false)));
        node.add(new DefaultMutableTreeNode(new CheckObject("Unterkategorie 5", false)));
        node.add(new DefaultMutableTreeNode(new CheckObject("Unterkategorie 6", true)));
        rootNode.add(node);
        
        tree = new JTree(rootNode) {
        	public void startEditingAtPath(TreePath path) {
        		DefaultMutableTreeNode treeNode = (DefaultMutableTreeNode)path.getLastPathComponent();
        		if (!treeNode.isLeaf()) {
        			super.startEditingAtPath(path);
        		}
        	}
        };
        tree.setCellRenderer(new MyCellRenderer());
        tree.setEditable(false);
        tree.addMouseListener(new MouseAdapter() {
			public void mouseClicked(MouseEvent evt) {
				if (evt.getClickCount()>1) {
					TreePath path = tree.getPathForLocation(evt.getX(), evt.getY());
					if (path==null)
						return;
					DefaultMutableTreeNode treeNode = (DefaultMutableTreeNode)path.getLastPathComponent();
					if (treeNode.getUserObject() instanceof CheckObject) {
						CheckObject co = (CheckObject)treeNode.getUserObject();
						co.setSelected(!co.isSelected());
						tree.repaint();
					}
				}
			}
        });
        this.add(tree);
    }
    
    class CheckObject {
    	private String text;
    	private boolean selected;
    	
    	public CheckObject(String text, boolean isSelected) {
    		this.text = text;
    		this.selected = isSelected;
    	}
    	
    	public boolean isSelected() {
    		return selected;
    	}
    	
    	public void setSelected(boolean b) {
    		selected = b;
    	}
    	
    	public String getText() {
    		return text;
    	}
    }
    
    class MyCellRenderer extends DefaultTreeCellRenderer {
    	private DefaultMutableTreeNode treeNode;
    	private CheckObject chObj;
    	private JCheckBox chBox = new JCheckBox();
    	
    	public Component getTreeCellRendererComponent(JTree tree, Object value,
                boolean selected, boolean expanded, boolean leaf, int row, boolean hasFocus) {
    		super.getTreeCellRendererComponent(tree, value, selected, expanded, leaf, row, hasFocus);
    		treeNode = (DefaultMutableTreeNode) value;
    		
    		if (treeNode.getUserObject() instanceof CheckObject) {
    			chObj = (CheckObject) treeNode.getUserObject();
    			chBox.setText(chObj.getText());
    			chBox.setSelected(chObj.isSelected());
    			chBox.setBackground(this.getBackground());
    			return chBox;
    		}
    		this.setIcon(null);
    		return this;
    	}
    }
}
 

SilencerandLois

Aktives Mitglied
Wow.... das ging aber schnell!

Besten Dank für die Testklasse!
Sieht eigentlich genau nach dem aus, was ich gesucht habe!
Ich denke Mal => Problem gelöst :)

lg
Martin
 

SilencerandLois

Aktives Mitglied
So, jetzt bin ich auch einmal dazugekommen, den Vorschlag der Testklasse umzusetzen. Auf ein kleines Problem bin ich jedoch noch gestoßen: ich schaffe es, dass neben den anzuzeigenden Text auch eine Checkbox angezeigt wird.
Jedoch habe ich noch eigene Icons, welche angezeigt werden, falls die Baumstruktur geöffnet bzw. zusammengeklappt ist.
Nun schaffe ich es nicht, sowohl die Icons, als auch die Checkbox anzuzeigen. Wahrscheinlich ist es total easy zu lösen, aber aktuell stehe ich auf dem Schlauch :oops:

Mein aktueller Cell-Renderer sieht wie folgt aus:
Java:
  public Component getTreeCellRendererComponent(JTree tree, Object value, boolean sel,
                                                boolean expanded, boolean leaf, int row,
                                                boolean hasFocus) {

     // Icons für die Anzeige
    setOpenIcon(this.mOriginalKnotenIconAuf);
    setClosedIcon(this.mOriginalKnotenIconZu);
    setLeafIcon(this.mOriginalBlattIcon);


    // Hier meine Checkbox mit dem Zusand und dem Text
    mCheckBox.setSelected(isWaehlbarerKnoten(value));
    mCheckBox.setText(value.toString());



    super.getTreeCellRendererComponent(tree, value, sel, expanded, leaf, row, hasFocus);
    return this;
  }

In der aktuellen Version werden die Icons angezeigt. Wenn ich die Checkbox als Rückgabetyp zurückgebe, wird natürlich nur die Checkbox zurückgegeben.
Wie kann ich aber die Anzeige beider Elemente erreichen?

Besten Dank und viele Grüße,
Martin
 

SilencerandLois

Aktives Mitglied
Danke für die Antwort. Mit den Panels funktioniert es einwandfrei! :)


Eine Frage nach: wie an der angehängten Grafik ersichtlich, sind die Checkboxen noch grau umrandet. Wie bekommt man dieses Grau weg?
 

Michael...

Top Contributor
Das ist vom Look and Feel abhängig.
Du arbeitest ja ohnehin mit weiteren Icons. Man könnte auch statt den Zustand über eine JCheckBox zu repräsentieren einfach nur ein passendes Icon darstellen (macht die CheckBox genauso)
 

SilencerandLois

Aktives Mitglied
Hm... irgendwie stolpere ich hier von ein Problem ins nächste und bekomm es nicht gebacken:
Jetzt habe ich zwar eine schöne Checkbox in meiner Baumdarstellung. Leider kann ich jedoch die Checkbox nicht selektieren / deselktieren (Status der Checkbox ist auf enabled).
Muss ich hier mit einem extra Mouse-Listener arbeiten? Und wenn ja: an welches Komponente muss ich den Listener hängen? Ich habe versucht, eine Listener an die Checkbox, bzw. an das Panel zu hängen, in denen ich wie letztens beschrieben die Kmponenten gepackt habe. Leider jedoch ohne Ergebnis.

Danke für die Hilfe und viele Grüße,
Martin
 

Ebenius

Top Contributor
Das ist genau was Michael meinte mit:
[…]handelt es sich nur um eine gerenderte Darstellung von Komponenten[…]
Stell Dir einen Renderer vor wie einen Datumsstempel. Beim Zeichnen des Baumes wird der CellRenderer für eine Zelle konfiguriert (Datum am Stempel einstellen) und dann auf den Baum gezeichnet (Stempel aufs Papier), dann wird der selbe Stempel für die nächste Zelle neu konfiguriert (anderes Datum) und dann wieder gezeichnet (gestempelt). Renderer sind aber nie wirklich lebendig.

Wenn Du einen Knoten irgendwie bearbeiten willst (Text ändern, CheckBox setzen) dann braucht Dein Baum noch einen CellEditor. Der funktioniert so ähnlich wie ein CellRenderer; es gibt in der Regel für alle Zellen nur einen (JTree) bzw. eine handvoll (JTable) CellEditor. Der wird dann, wenn das editieren los geht auf die betroffene Zelle konfiguriert und dann da angezeigt. Der CellEditor lebt aber, bis er nicht mehr gebraucht wird. Editieren mehrerer Zellen gleichzeitig ist nicht möglich.

Schon mal da reingeguckt? How to Use Trees (The Java™ Tutorials > Creating a GUI With JFC/Swing > Using Swing Components)

Ebenius
 

Michael...

Top Contributor
Muss ich hier mit einem extra Mouse-Listener arbeiten? Und wenn ja: an welches Komponente muss ich den Listener hängen? Ich habe versucht, eine Listener an die Checkbox, bzw. an das Panel zu hängen, in denen ich wie letztens beschrieben die Kmponenten gepackt habe. Leider jedoch ohne Ergebnis.
Ein Listener an einer Renderer Komponente nutzt nichts. Man kann einen Listener - wie in meinem Bsp - an den JTree hängen.
Für komplexere Knoten gibt's aber auch noch den TreeCellEditor als Pendant zum Renderer.
 

SilencerandLois

Aktives Mitglied
Danke für die Antworten!
Ich bin leider noch nicht dazu gekommen, um euren Vorschlag umzusetzen, aber vorab noch eine Frage dazu: ein Freund hat erwähnt, dass - wenn ich mit einem CellEditor arbeite - ich zuerst einmal auf den Baumknoten klicken muss, um diesen zu aktivieren. Erst durch einen zweiten Klick auf die Checkbox wurde diese selektiert bzw. deselektiert.

Stimmt das? Am liebsten wäre es mir, dass ich durch einen einfachen Klick auf die Checkbox diese einfach selektieren bzw. deselektieren kann. Sprich ohne einen zweiten Klick.

Besten Dank und viele Grüße,
Martin
 

Michael...

Top Contributor
aber vorab noch eine Frage dazu: ein Freund hat erwähnt, dass - wenn ich mit einem CellEditor arbeite - ich zuerst einmal auf den Baumknoten klicken muss, um diesen zu aktivieren. Erst durch einen zweiten Klick auf die Checkbox wurde diese selektiert bzw. deselektiert.

Stimmt das?
Grundsätzlich: Nein. Hängt allerdings auch davon ab wie und was für einen Editor man implementiert.

Wobei man sich überlegen könnte einfach nur wie in meinem Bsp. auf einen Editor zu verzichten und nur mit einem MouseListener zu arbeiten.
 

SilencerandLois

Aktives Mitglied
Hallo,
@Michael: die Variante mit dem Mouselistener klappt bei meiner Konstellation leider nicht, da die Methode "getUserObject" bei mir immer null zurückgibt...

Ich hätte mich jetzt ansonsten für die TreeCellEditor-Variante entschieden. Obwohl ich mir ein paar Beispiele angesehen habe, weiß ich in meiner Fallkonstellation nicht, wo ich den DefaultTreeCellEditor anhängen soll.
Bei mir wird aktuell in einem eigenen TreeCellRenderer in der Methode getTreeCellRendererComponent(...) die Checkbox initialisiert und hinzugefügt. An dieser Stelle müsste ich wohl noch den TreeCellEditor hinzufügen, weiß aber leider nicht genau wie (ich habe mehrere Varianten versucht, leider funktioniert aber keine....)

Hier nochmals die aktuelle getTreeCellRendererComponent()-Methode:
Java:
public Component getTreeCellRendererComponent(JTree tree, Object value, boolean sel,
                                                boolean expanded, boolean leaf, int row,
                                                boolean hasFocus) {
		// Das Wählbar-Kennzeichen soll durch eine Checkbox dargestellt werden.
    JCheckBox mCheckBox = new JCheckBox();
    mCheckBox.setSelected(isWaehlbarerKnoten(value));

    // Zum verknüpfen des Textstrings und der Checkbox müssen beide Elemente in ein eigenes Panel gepackt werden.
    // Dieses Panel wird für die Anzeige zurückgegeben.
    JPanel result = new JPanel();
    result.setLayout(new GridBagLayout());
    
    result.add(mCheckBox, new GridBagConstraints(0, 0, 1, 1, 0.0, 0.0,
        GridBagConstraints.CENTER, GridBagConstraints.BOTH,
        new Insets(0, 0, 0, 0), 0, 0));

    result.add(this, new GridBagConstraints(1, 0, 1, 1, 1.0, 0.0,
            GridBagConstraints.CENTER, GridBagConstraints.BOTH,
            new Insets(0, 0, 0, 0), 0, 0));
return result;


Besten Dank für die Hilfe!
Viele Grüße,
Martin
 

Michael...

Top Contributor
Hallo,
@Michael: die Variante mit dem Mouselistener klappt bei meiner Konstellation leider nicht, da die Methode "getUserObject" bei mir immer null zurückgibt
Dann steckt in den Knoten nichts drin!? Besteht der Tree nur aus leeren DefaultMutableTreeNodes?
Hier nochmals die aktuelle getTreeCellRendererComponent()-Methode:
Java:
public Component getTreeCellRendererComponent(JTree tree, Object value, boolean sel,
                                                boolean expanded, boolean leaf, int row,
                                                boolean hasFocus) {
		// Das Wählbar-Kennzeichen soll durch eine Checkbox dargestellt werden.
    JCheckBox mCheckBox = new JCheckBox();
    mCheckBox.setSelected(isWaehlbarerKnoten(value));

    // Zum verknüpfen des Textstrings und der Checkbox müssen beide Elemente in ein eigenes Panel gepackt werden.
    // Dieses Panel wird für die Anzeige zurückgegeben.
    JPanel result = new JPanel();
    result.setLayout(new GridBagLayout());
    
    result.add(mCheckBox, new GridBagConstraints(0, 0, 1, 1, 0.0, 0.0,
        GridBagConstraints.CENTER, GridBagConstraints.BOTH,
        new Insets(0, 0, 0, 0), 0, 0));

    result.add(this, new GridBagConstraints(1, 0, 1, 1, 1.0, 0.0,
            GridBagConstraints.CENTER, GridBagConstraints.BOTH,
            new Insets(0, 0, 0, 0), 0, 0));
return result;
Der Sinn eines Renderers ist es möglichst resourcenschonend komplexe Objekte darzustellen, in dem Du in der getTreeCellRendererComponent() jedesmal alle Objekte neu erstellst untergräbst Du dieses Konzept.
==> Renderer Komponente einmalig im Konstruktor erzeugen und in der getTreeCellRendererComponent() entsprechend dem zu zeichnenden Knoten anpassen.
Ich hätte mich jetzt ansonsten für die TreeCellEditor-Variante entschieden. Obwohl ich mir ein paar Beispiele angesehen habe, weiß ich in meiner Fallkonstellation nicht, wo ich den DefaultTreeCellEditor anhängen soll.
Genauso wie den Renderer nur per setCellEditor(...)
 

SilencerandLois

Aktives Mitglied
So, jetzt bin ich schon einmal deutlich weiter :)
Danke für die Unterstützung bis jetzt!

Ein Problem habe ich jedoch leider noch (Problem wird ganz unten beschrieben.... der aktuelle Stand muss nicht unbedingt gelesen werden)

Zum aktuellen Stand:
- Die Checkbox wird nun im Konstruktor der Renderer-Komponente angelegt
- Renderer und Editor werden nun wie folgt initialisert:
Java:
// Eigener Renderer für Einträge
SchluesselEintragTreeCellRenderer cellRenderer = new SchluesselEintragTreeCellRenderer();
tree.setCellRenderer(cellRenderer);
SchluesselEintragTreeCellEditor cellEditor =  new SchhluesselEintragTreeCellEditor(tree, cellRenderer, new DefaultCellEditor(cellRenderer.getCheckBox())); // <-- hier Zugriff auf die Checkbox

Meine Editor Klasse sieht wie folgt aus:
Java:
public class SchluesselEintragTreeCellEditor extends DefaultTreeCellEditor {
  public SchluesselEintragTreeCellEditor(JTree tree, DefaultTreeCellRenderer renderer,
				 TreeCellEditor editor) {
    super(tree, renderer, editor);
  }

  public Component getTreeCellEditorComponent(JTree tree, Object value,
						boolean isSelected,
						boolean expanded,
						boolean leaf, int row) {
    Component comp = super.getTreeCellEditorComponent(tree,value,isSelected,expanded,leaf,row);


    // Hier werden die Werte manipuliert
    JCheckBox checkBox = (JCheckBox) editingComponent;
    checkBox.setSelected(true); //<-- Berechnungslogik in dem Bsp. nicht relefang...

    return comp;
  }

  @Override
  protected void startEditingTimer() {
    if(timer == null) {
        timer = new Timer(0, this);
        timer.setRepeats(false);
    }
    timer.start();
  }

  @Override
  protected boolean inHitRegion(int x, int y) {
    if(lastRow != -1 && tree != null) {
        Rectangle bounds = tree.getRowBounds(lastRow);

      if (bounds != null && bounds.x < x && x < bounds.x + CHECKBOX_WIDTH) {
        return true;
      }
    }
    return false;
  }

- Durch das Überschreiben der inHitRegion-Methode wird meine Checkbox auch nur selektiert, wenn die Checkbox markiert wird.
- Durch das Überschreiben der startEditingTimer-Methode wird sofort mit der Editierung begonnen (Timer wurde auf 0 gesetzt).

Ein kleines Problem habe ich jedoch noch:
- Wenn ich die Checkbox anklicke, verschwindet mein Label des angeklickten Baumes. Erst wenn einen anderen Knoten anklicke, erscheint mein Label wieder (und wird dabei korrekt angezeigt).
- Wie kann ich den Editor konfigurieren, dass ich direkt, wenn ich auf das die Checkbox klicke, der Eintrag selektiert bzw. deselektiert wird? Aktuell muss ich erst einmal den Eintrag selektieren, erst dann kann ich die Checkbox verändern.
 
Zuletzt bearbeitet:

Michael...

Top Contributor
Ein kleines Problem habe ich jedoch noch:
- Wenn ich die Checkbox anklicke, verschwindet mein Label des angeklickten Baumes. Erst wenn einen anderen Knoten anklicke, erscheint mein Label wieder (und wird dabei korrekt angezeigt).
Ich habe noch nie mit dem DefaultTreeCellEditor gearbeitet. (Arbeite lieber ausschließlich mit dem Interface) Aber ich würde nicht die im Renderer verwendet ComboBox als Editor verwenden, das könnte oben genannte Probleme verursachen. Erstelle lieber eine zweite.
- Wie kann ich den Editor konfigurieren, dass ich direkt, wenn ich auf das die Checkbox klicke, der Eintrag selektiert bzw. deselektiert wird? Aktuell muss ich erst einmal den Eintrag selektieren, erst dann kann ich die Checkbox verändern.
Kannst Du nicht in der getTreeCellEditor... den aktuellen Zustand prüfen und dann einfach invertieren?
 

SilencerandLois

Aktives Mitglied
Hallo Michael,

Ich habe noch nie mit dem DefaultTreeCellEditor gearbeitet. (Arbeite lieber ausschließlich mit dem Interface) Aber ich würde nicht die im Renderer verwendet ComboBox als Editor verwenden, das könnte oben genannte Probleme verursachen. Erstelle lieber eine zweite.
Nun habe ich eine eine eigene, neue Checkbox dem Editor übergeben. Leider ohne Wirkung.
Funktionieren tut es jedoch, wenn ich nach dem ändern des Wertes der Checkbox die Methode stopCellEditing() ausführe :D


Kannst Du nicht in der getTreeCellEditor... den aktuellen Zustand prüfen und dann einfach invertieren?
Diese Aussage verstehe ich leider nicht ganz.

Besten Dank und viele Grüße,
MArtin
 
Zuletzt bearbeitet:

Michael...

Top Contributor
Diese Aussage verstehe ich leider nicht ganz.
Damit meinte ich:
Um in der getTreeCellEditor.. die Editor Komponte entsprechend des Status des Knoten einzurichten, musst Du ja irgendwo auf der CheckBox
Code:
setSelected(bedingung)
aufrufen. Wenn Du jetzt stattdessen
Code:
setSelected(!bedingung)
aufrufst, besitzt die Editorkomponente beim Darstellen direkt den invertierten Zustand.

In wie weit das jetzt 1:1 auf Deinen Code übertragbar ist, hängt von Deiner Implementierung ab. Aber irgendwo wird ja der Zustand der Editor CheckBox gesetzt und darauf kann man direkt oder zumindest indirekt Einfluss darauf nehmen.
 

SilencerandLois

Aktives Mitglied
Da ich wieder ein kleines Problem mit den Checkboxen habe, wollte ich keinen neuen Bug aufmachen, sondern hier das aktuelle Problem weiter beschreiben.

Das aktuelle Szenario ist so, dass ich in einer Tabellespalte einen booleschen Wert durch eine Checkbox darstelle. Hierfür habe ich einen eigenen CellRenderer geschrieben (vgl. obere Kommentare).
Einen eigenen CellEditor verwende ich jedoch nicht.

Wenn ich nun doppelt auf die Zelle Klicke, wird nun nicht mehr die Checkbox angezeigt, sondern der entsprechende boolesche Wert, welcher zugleich editierbar ist. Das sollte jedoch nicht der Fall sein.

Wie kann ich das erreiche? Ich sitze gerade leider etwas auf der Leitung :)

Besten Dank und viele Grüße,
Martin
 

SilencerandLois

Aktives Mitglied
Also das benutzen eines eigenen CellEditors, welcher keine Funktionalität auf der Checkbox erlaubt, funktioniert.

Gibt es aber keinen schöneren Weg?

Danke und viele Grüße,
Martin
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
U JavaFX CheckBoxen in GUI verschieben AWT, Swing, JavaFX & SWT 20
D JavaFX Dynamisch erzeugte Checkboxen aus VBox auslesen AWT, Swing, JavaFX & SWT 3
D Java Swing, Label lässt sich nicht mit Checkboxen/Knopf verändern AWT, Swing, JavaFX & SWT 2
T Dynamisch mehrere Checkboxen anlegen AWT, Swing, JavaFX & SWT 2
D Seltsames Verhalten meiner CheckBoxen AWT, Swing, JavaFX & SWT 7
M Swing CheckBoxen werden nicht in jTable angezeigt AWT, Swing, JavaFX & SWT 3
S AWT Erstellen von Checkboxen AWT, Swing, JavaFX & SWT 33
M Checkboxen Namen setzten über Parameter => Abfragen? AWT, Swing, JavaFX & SWT 2
F checkboxen auslesen/ansprechen AWT, Swing, JavaFX & SWT 1
X Checkboxen erstellt mit MouseClicked event AWT, Swing, JavaFX & SWT 10
J Hintergrundfarbe von CheckBoxen in einer JTable AWT, Swing, JavaFX & SWT 4
T JTree mit Checkboxen anpassen AWT, Swing, JavaFX & SWT 7
R Checkboxen - Event mit Controller abfangen AWT, Swing, JavaFX & SWT 7
S swt table mit checkboxen: wie nachträglich im code setzen? AWT, Swing, JavaFX & SWT 6
D Mehrere CheckBoxen im TableModel wechselseitig ausschließen AWT, Swing, JavaFX & SWT 5
G Namen mehrer Checkboxen abfragen AWT, Swing, JavaFX & SWT 7
F Checkboxen in JTable abfragen AWT, Swing, JavaFX & SWT 2
M@rk Jtree Checkboxen AWT, Swing, JavaFX & SWT 2
G JTree mit Checkboxen und Problem mit isSelected() AWT, Swing, JavaFX & SWT 2
G Aktionen bei Checkboxen AWT, Swing, JavaFX & SWT 2
R Checkboxen plazieren AWT, Swing, JavaFX & SWT 3
M JList mit checkboxen AWT, Swing, JavaFX & SWT 2
O Dynamische Checkboxen AWT, Swing, JavaFX & SWT 21
TheJavaKid .isSelected() bei AWT Checkboxen? AWT, Swing, JavaFX & SWT 2
F Checkboxen eines anderen Panels ansprechen AWT, Swing, JavaFX & SWT 3
C Checkboxen bzw. CheckboxGroup AWT, Swing, JavaFX & SWT 3
T Checkboxen layouten AWT, Swing, JavaFX & SWT 20
S SWT In Listen den Einträgen Daten zuordnen AWT, Swing, JavaFX & SWT 2
S JList mit Einträgen versehen schlägt fehl AWT, Swing, JavaFX & SWT 4
G JList mit einer großen Anzahl an Einträgen AWT, Swing, JavaFX & SWT 15
S Swing editable JCombobox mit eigenen Einträgen manangen AWT, Swing, JavaFX & SWT 5
H Swing NullPointerException in JTable bei vielen Einträgen AWT, Swing, JavaFX & SWT 2
H2SO3- choice mit mehrfarbigen einträgen AWT, Swing, JavaFX & SWT 4
PAX JList aktualisiert zu langsam beim Hinzufügen von Einträgen AWT, Swing, JavaFX & SWT 6
J Kalender-App mit tagesübergreifenden Einträgen AWT, Swing, JavaFX & SWT 25
R SWT: Icons im Table vor den Einträgen AWT, Swing, JavaFX & SWT 3
A Ideen für eine Filterfunktion von JTable-Einträgen AWT, Swing, JavaFX & SWT 5
F Objekte beliebigen Typs zu JComboBox hinzufügen AWT, Swing, JavaFX & SWT 7

Ähnliche Java Themen

Neue Themen


Oben