JCheckBox in JTable

Status
Nicht offen für weitere Antworten.

Verjigorm

Top Contributor
Hallo,
irgendwie funktionieren meine Checkboxen in der JTable nicht so wie ich möchte.
Der Text wird nicht immer angezegt und selektiert werden sie auch nicht korrekt.
Kann mir wer sagen, was man da ändern muss, irgendwie raff ich das nicht so ganz.
Die Renderer und Editoren sind immer noch ein Rätsel für mich.

mfg Verjigorm

Code:
package jtableButton;

import java.awt.Component;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

import javax.swing.DefaultCellEditor;
import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.UIManager;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableCellRenderer;

public class JCheckBoxTableExample extends JFrame {

	  public JCheckBoxTableExample() {
	    super("JCheckboxTable Example");

	    DefaultTableModel dm = new DefaultTableModel(new String[]{"CheckBox"},2);
//	    dm.setDataVector(new Object[][] { { "Checkbox 1", "foo" },
//	        { "Checkbox 2", "bar" } }, new Object[] { "CheckBox", "String" });

	    JTable table = new JTable(dm);
	    table.getColumn("CheckBox").setCellRenderer(new CheckboxRenderer());
	    table.getColumn("CheckBox").setCellEditor(
	        new CheckboxEditor(new JCheckBox()));
	    JScrollPane scroll = new JScrollPane(table);
	    getContentPane().add(scroll);
	    setSize(400, 100);
	    setVisible(true);
	  }

	  public static void main(String[] args) {
	  
	   
	    JCheckBoxTableExample frame = new JCheckBoxTableExample();
	    frame.addWindowListener(new WindowAdapter() {
	      public void windowClosing(WindowEvent e) {
	        System.exit(0);
	      }
	    });
	  }
	}

class CheckboxEditor extends DefaultCellEditor {
  protected JCheckBox checkbox;

  public CheckboxEditor(JCheckBox _checkBox) {
    super(_checkBox);
    checkbox = new JCheckBox("BOX");
    checkbox.setOpaque(true);
    checkbox.setSelected(true);
//    checkbox.addActionListener(new ActionListener() {
//      public void actionPerformed(ActionEvent e) {
//        fireEditingStopped();
//      }
//    });
  }

  public Component getTableCellEditorComponent(JTable table, Object value,
      boolean isSelected, int row, int column) {
    if (isSelected) {
      checkbox.setForeground(table.getSelectionForeground());
      checkbox.setBackground(table.getSelectionBackground());
    } else {
      checkbox.setForeground(table.getForeground());
      checkbox.setBackground(table.getBackground());
    }
//    System.out.println(value);
//    checkbox.setText((value == null) ? "" : value.toString());
    	checkbox.setText(checkbox.getText());
    return checkbox;
  }
}

class CheckboxRenderer extends JCheckBox implements TableCellRenderer {

  public CheckboxRenderer() {
    setOpaque(true);
  }

  public Component getTableCellRendererComponent(JTable table, Object value,
      boolean isSelected, boolean hasFocus, int row, int column) {
    if (isSelected) {
      setForeground(table.getSelectionForeground());
      setBackground(table.getSelectionBackground());
    } else {
      setForeground(table.getForeground());
      setBackground(UIManager.getColor("Checkbox.background"));
    }
//    System.out.println(value);
//    setText((value == null) ? "" : value.toString());
    return this;
  }
  
}
 

voidee

Mitglied
Code:
package jtableButton;

import java.awt.Component;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

import javax.swing.DefaultCellEditor;
import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.UIManager;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableCellRenderer;

public class JCheckBoxTableExample extends JFrame {

     public JCheckBoxTableExample() {
       super("JCheckboxTable Example");

       DefaultTableModel dm = new DefaultTableModel(new String[]{"CheckBox"},2);
//       dm.setDataVector(new Object[][] { { "Checkbox 1", "foo" },
//           { "Checkbox 2", "bar" } }, new Object[] { "CheckBox", "String" });

       JTable table = new JTable(dm);
       table.getColumn("CheckBox").setCellRenderer(new BooleanCellRenderer());
       table.getColumn("CheckBox").setCellEditor(new BooleanCellEditor());
       JScrollPane scroll = new JScrollPane(table);
       getContentPane().add(scroll);
       setSize(400, 100);
       setVisible(true);
     }

     public static void main(String[] args) {
    
      
       JCheckBoxTableExample frame = new JCheckBoxTableExample();
       frame.addWindowListener(new WindowAdapter() {
         public void windowClosing(WindowEvent e) {
           System.exit(0);
         }
       });
     }

	class BooleanCellEditor extends DefaultCellEditor {
	
		public BooleanCellEditor() {
				super(new JCheckBox());
				JCheckBox checkBox = (JCheckBox)getComponent();
				checkBox.setHorizontalAlignment(JCheckBox.CENTER);
		}
		
	
	}

	class BooleanCellRenderer extends JCheckBox implements TableCellRenderer {
	
		public BooleanCellRenderer() {
			super();
			setHorizontalAlignment(JLabel.CENTER);
		}
	
		public Component getTableCellRendererComponent(JTable table, Object value,
				boolean isSelected, boolean hasFocus, int row, int column) {
			
			if (isSelected) {
				setForeground(table.getSelectionForeground());
				setBackground(table.getSelectionBackground());
			} else {
				setForeground(table.getForeground());
				setBackground(UIManager.getColor("Checkbox.background"));
			}
	
			setSelected((value != null && ((Boolean)value).booleanValue()));
			return this;
		}
	 
	}


}  // -- eoclass JCheckBoxTableExample -- //

Eigentlich warst du schon auf dem richtigen Weg. Beachte bitte folgende Änderungen:

die Klassen
- BooleanCellRenderer und
- BooleanCellEditor
hab ich in die Klasse ...Example reingenommen

In deinem CellRenderer hast du das "value" gar nicht ausgewertet. Eventuell hast du das mit "isSelected" verwechselt. "isSelected" gibt aber nur an, ob die Tabellenzelle selektiert ist. "value" dagegen enthält den Wert der Zelle. Da du eine JCheckBox verwendest, was vom Model her nichts anderes als ein Boolean ist, kommt dort null oder ein Boolean Wert an.
Wenn du nicht sicher bist einfach mit value.getClass().getName() den Namen ausgeben lassen. null bedeute, dass noch kein Wert da ist (in deinem Beispiel kommen null-Werte, da du der Table angibst 2 Zeilen darzustellen, aber im Modell keine Werte dafür setzt).

Den Editor / Renderer hab ich verallgemeinert, da ja Boolean dargestellt (visualisiert oder ge-rendert) und editiert werden. Dass man dazu geschickterweise eine JCheckBox verwendet ist zwar zeckmäßig, würde ich aber nicht in die entsprechenden Klassennamen einfliessen lassen.

Gruß
Tom
 

Verjigorm

Top Contributor
Vielen Dank, das muss ich mir zuhause nochmal ganz genau anschauen, irgendwie komm ich nach dem 3-4.Mal damit immer noch nicht klar :D
 
X

xewat

Gast
hey,
ich habe ein großes problem. ich habe eine methode ausdrucken und der erstellt ein pdf datei. ich möchte jetzt chekboxen vor jeder datensatz haben damit man auswählen kann was man drucken möchte.
ich habe komme echt nicht weiter. hier ist ein abschnitt des queltexts:

.....
Java:
					jTableAusgabeModel =  new DefaultTableModel();
					jTableAusgabe = new JTable(jTableAusgabeModel);
					jScrollPaneAusgabe.setViewportView(jTableAusgabe);
					jTableAusgabe.setModel(jTableAusgabeModel);
//hier kommen die neuen daten sätze von rs (resultset)

							while(rs.next())
							{
Object[] rowData=   {Boolean.class,rs.getString(3),rs.getString(4),rs.getString(5),rs.getString(6),rs.getString(7),rs.getString(8)};			
						((DefaultTableModel) jTableAusgabeModel).addRow(rowData);
							}

ich suche nach wochen durch ganze google. da kamen eure lösung mir am logischsten vor aber ich konnte es nirgend einbauen nicht am anfang (da es noch keine datensätze da gibt) und auch nicht am ende (hat irgendwie immer fehler gezeigt meine unknownsource und ich habe natürlich den spalten namen von checkbox zu numerischen 1 geändert usw.)
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
D JCheckbox und JSpinner in JTable AWT, Swing, JavaFX & SWT 9
B JTable inkl. JCheckbox AWT, Swing, JavaFX & SWT 5
StrikeTom JCheckBox in JTable AWT, Swing, JavaFX & SWT 6
Z Swing JCheckBox in einer JTable AWT, Swing, JavaFX & SWT 8
X Swing JCheckbox in JTable AWT, Swing, JavaFX & SWT 6
Balbes Änderung des Wertes von JCheckBox in einer JTable AWT, Swing, JavaFX & SWT 4
D JTable - JCheckbox und Renderer AWT, Swing, JavaFX & SWT 2
K JCheckBox in einer JTable auswählbar machen AWT, Swing, JavaFX & SWT 2
F Wie Item Listener zu JCheckBox(in JTable) hinzufügen? AWT, Swing, JavaFX & SWT 6
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
K Swing JCheckbox ändern AWT, Swing, JavaFX & SWT 3
N ChangeListener und jCheckBox AWT, Swing, JavaFX & SWT 3
A Swing JCheckbox transparent machen AWT, Swing, JavaFX & SWT 7
G Swing JCheckBox, setEnabled(false) und HTML Text Problem AWT, Swing, JavaFX & SWT 5
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
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
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
T JCheckBox deselektieren (Haken wieder entfernen) - wie? AWT, Swing, JavaFX & SWT 5
W JRadioButton / JCheckBox problem AWT, Swing, JavaFX & SWT 6
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
M JCheckbox, das selektieren verhindern AWT, Swing, JavaFX & SWT 9
M JCheckBox Standard MouseListener entfernen AWT, Swing, JavaFX & SWT 13
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
J Drag und drop aus einer JTable - bitte um Unterstützung AWT, Swing, JavaFX & SWT 2
S HPRO und UPRO gemeinsame JTABLE gemeinsamer RENDERER ? AWT, Swing, JavaFX & SWT 1
F Swing JTable - MultiHeader inkl. Eingabemöglichkeit AWT, Swing, JavaFX & SWT 1
S JTable - Feldinhalte anzeigen AWT, Swing, JavaFX & SWT 15
D Swing JTable Spaltenbreite AWT, Swing, JavaFX & SWT 1
W Gibt es einen "automatischen Listener" in Swing oder JTable oder der ATM-Klasse? AWT, Swing, JavaFX & SWT 14
G jTable - getSelectedRow() AWT, Swing, JavaFX & SWT 3
I JTable mit einem Button zu einer Detail Seite springen AWT, Swing, JavaFX & SWT 4
P JTable Listener für die Änderung einzelner Zellen oder Rows AWT, Swing, JavaFX & SWT 2
D Tastaturabfragen CTRL+t, CTRL+E bei eine JTable, bestehend aus JTextAteas AWT, Swing, JavaFX & SWT 4
P Checkboxes in JTable nicht editable AWT, Swing, JavaFX & SWT 9
F Best-Practise: JTable Text in Zelle zu groß AWT, Swing, JavaFX & SWT 2
izoards JTable in CSV File schreiben... AWT, Swing, JavaFX & SWT 23
Kohl Jedes Objekt einer JTable um ein Zeichen verkürzen AWT, Swing, JavaFX & SWT 7
I JTable, DefaultTableModel, zwei Zahlen multiplizieren. AWT, Swing, JavaFX & SWT 26
M JTABLE / wie oft wurde gewürfelt. AWT, Swing, JavaFX & SWT 1
F JTable vergrößern AWT, Swing, JavaFX & SWT 2
H JTable: Diverse NullPointer-Exceptions zur Laufzeit AWT, Swing, JavaFX & SWT 3
J Swing Werte des JTable werden nicht angezeigt AWT, Swing, JavaFX & SWT 9
T Swing JTable cellRenderer mit jpg Hintergrundfarbe lässt sich nicht ändern. AWT, Swing, JavaFX & SWT 1
HoT Einzelne Zelle in JTable Rahmen unten setzen AWT, Swing, JavaFX & SWT 24
B JTable Zellen zusammenfügen AWT, Swing, JavaFX & SWT 3
M Swing Cell Renderer für Zeilenumbruch in JTable AWT, Swing, JavaFX & SWT 0
H JTable im JSplitPane darstellen AWT, Swing, JavaFX & SWT 2
MadMax2506 Swing JTable lädt sehr lange AWT, Swing, JavaFX & SWT 1
D Zeilenumbruch in einer JTable AWT, Swing, JavaFX & SWT 9
R Swing JTable und Spaltenausrichtung AWT, Swing, JavaFX & SWT 8

Ähnliche Java Themen

Neue Themen


Oben