Announcement

Collapse
No announcement yet.

Problem mit JCheckbox in JTable

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Problem mit JCheckbox in JTable

    Hallo,
    nach langer Recherche habe ich herausgefunden, wie ich in meiner Tabelle die Checkboxen anklicken kann. Nur leider ist das nicht von dauer, sobald ich die nächste Checkbox anklicke wird die erste wieder zurückgesetzt.

    Was mache ich noch falsch? Hat jemand einen Tip für mich?

    Gruß
    E.

    Hier der Code:

    Code:
    package test;
    
    import java.awt.Dimension;
    
    import javax.swing.JFrame;
    import javax.swing.JTable;
    import javax.swing.table.TableColumn;
    
    public class JTableDemo extends Thread
    {
    	private JFrame			frame;
    	JTable					tbl;
    	MyAbstractTableModel	myTableModel;
    	TableColumn				tc;
    
    	public JTableDemo()
    	{
    		frame = new JFrame("Sync V1.4 by www.ek74.com");
    		myTableModel = new MyAbstractTableModel();
    		tbl = new JTable();
    		tbl.setModel(myTableModel);
    
    		tc = tbl.getColumnModel().getColumn(1);
    		tc.setCellEditor(new MyCheckboxTableCellEditor());
    
    		frame.add(tbl);
    		frame.setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
    		frame.setMinimumSize(new Dimension(300, 500));
    
    	}
    
    	public void start()
    	{
    		myTableModel.addRow("Name1", false);
    		myTableModel.addRow("Name2", false);
    		myTableModel.addRow("Name3", false);
    		myTableModel.addRow("Name4", false);
    		myTableModel.addRow("Name5", false);
    		myTableModel.addRow("Name6", false);
    
    		frame.setVisible(true);
    	}
    }

    Code:
    package test;
    
    import java.awt.Component;
    import javax.swing.AbstractCellEditor;
    import javax.swing.JCheckBox;
    import javax.swing.JTable;
    import javax.swing.table.TableCellEditor;
    
    @SuppressWarnings("serial")
    public class MyCheckboxTableCellEditor extends AbstractCellEditor implements TableCellEditor
    {
    	JCheckBox check;
    
    	public MyCheckboxTableCellEditor()
    	{
    		check = new JCheckBox();
    		check.setOpaque(false);
    		check.setHorizontalAlignment(JCheckBox.CENTER);
    	}
    
    	// This method is called when editing is completed
    	// It must return the new value to be stored in the cell
    	public Object getCellEditorValue()
    	{
    		check.setSelected(!check.isSelected());
    		return check.isSelected();
    	}
    
    	// This Component is called when a cell value is edited by the user
    	public Component getTableCellEditorComponent(JTable tbl, Object value, boolean isSelected, int r, int c)
    	{
    		return check;
    	}
    }

    Code:
    package test;
    
    import java.util.ArrayList;
    import java.util.List;
    
    import javax.swing.table.AbstractTableModel;
    
    @SuppressWarnings("serial")
    public class MyAbstractTableModel extends AbstractTableModel
    { 
    	private static final String[]	HEADER	= { "Name", "Freigabe" };
    	private List<Datensatz>			liste;
    
    	public MyAbstractTableModel()
    	{
    		liste = new ArrayList<Datensatz>();
    		fireTableDataChanged();
    	}
    
    	public void clear()
    	{
    		liste.clear();
    		fireTableDataChanged();
    	}
    
    	public void addRow(String name, boolean check)
    	{
    		liste.add(new Datensatz(name, check));
    		fireTableDataChanged();
    	}
    
    	public void removeRow(int r)
    	{
    		liste.remove(r);
    		fireTableDataChanged();
    	}
    
    	@Override
    	public int getColumnCount()
    	{
    		return HEADER.length;
    	}
    
    	@Override
    	public int getRowCount()
    	{
    		return liste.size();
    	}
    
    	@Override
    	public String getColumnName(int c)
    	{
    		return HEADER[c];
    	}
    
    	public void setValueAt(int r, int c, boolean check)
    	{
    		Datensatz satz = liste.get(r);
    
    		if (c== 6)
    		{
    			check = !check;
    			satz.setCheck(check);
    		}
    	}
    	
    	@Override
    	public Object getValueAt(int r, int c)
    	{
    		Datensatz satz = liste.get(r);
    
    		switch (c)
    		{
    			case 0:
    				return satz.getName();
    			case 1:
    				return satz.isChecked();
    			default:
    				return null;
    		}
    	}
    
    	public boolean isCellEditable(int r, int c)
    	{
    		if (c == 1)	return true;
    		return false;
    	}
    	
    	public Class<?> getColumnClass(int c)
    	{
    		if (c == 1) { return Boolean.class; }
    		return String.class;
    	}
    
    	public class Datensatz
    	{
    		private String	name;
    		private boolean	check;
    
    		public Datensatz(String name, boolean check)
    		{
    			this.name = name;
    			this.setCheck(check);
    		}
    
    		public String getName()
    		{
    			return name;
    		}
    
    		public void setName(String name)
    		{
    			this.name = name;
    		}
    
    		public boolean isChecked()
    		{
    			return check;
    		}
    
    		public void setCheck(boolean check)
    		{
    			this.check = check;
    		}
    	}
    }

    Code:
    package test;
    
    public class Start
    {
    	public static void main(String[] args)
    	{
    		JTableDemo demo = new JTableDemo();
    		demo.start();
    	}
    }

  • #2
    Nein, das geht anders

    https://entwickler-forum.de/showthre...ight=jcheckbox
    Christian

    Comment


    • #3
      Hallo Christian,
      was meinst du?
      Dein Beispiel unter dem Link benutzt DefaultTableModel, ich habe meine Tabelle aber mit einem AbstractTableModel aufgebaut und würde auch gerne dabei bleiben.
      Gruß

      Comment


      • #4
        Beitrag #5
        AbstractTableModel
        Warum? Dazu ist das DefaultTableModle ja da. Ggf. leite von diesem ab.
        Christian

        Comment


        • #5
          Hallo Christian,
          hat soweit funktioniert, dafür erst mal Danke.
          Sollte mir allerdings trotzdem noch jemand erklären können was bei meiner ersten Lösung gefehlt hat, lasst mich nicht dumm sterben :-)

          Gruß
          emk

          Comment

          Working...
          X