Hallo,
ich hab nen kleines Problem, ich hab mir hier aus dem FAQ das Tutorial über JTable rein gezogen, treffe nun aber auf ein Problem.
Ich möchte in der Table in Spalte 2 JCheckboxen haben, in seinem Beispiel EditableTable macht er das ja auch wunderbar, also vielmehr es geht, man kann dort die JCheckbox auswählen und ihren Wert ändern.
Hier mal der Code dazu
So ich habe darauf hin ein anderes Beispiel erweitert, nur bei mir kommt nur Müll raus, sprich man kann den Wert der JCheckbox nicht ändern. Ich hab auch schon versucht mit den beiden Zeilen
etwas zu erreichen aber fehlanzeige.
Hier mal mein Code
Und das dazu gehörige Tablemodel
Vielleicht kann mir ja jemand nen Tip geben...
gruß
keks[/code]
ich hab nen kleines Problem, ich hab mir hier aus dem FAQ das Tutorial über JTable rein gezogen, treffe nun aber auf ein Problem.
Ich möchte in der Table in Spalte 2 JCheckboxen haben, in seinem Beispiel EditableTable macht er das ja auch wunderbar, also vielmehr es geht, man kann dort die JCheckbox auswählen und ihren Wert ändern.
Hier mal der Code dazu
Code:
import javax.swing.DefaultCellEditor;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.AbstractTableModel;
import javax.swing.table.TableModel;
public class EditableTable {
public static void main(String[] a) {
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
String[] columnTitles = { "First Name", "Last Name", "Weight (lb)", "Blood Group", "Age>20yrs" };
Object[][] dataEntries = { { "Saravan", "Pantham", new Integer(50), "B", new Boolean(false) },
{ "Eric", "", new Integer(180), "O", new Boolean(true) },
{ "John", "", new Integer(120), "AB", new Boolean(false) },
{ "Mathew", "", new Integer(140), "A", new Boolean(true) }, };
TableModel model = new EditableTableModel(columnTitles, dataEntries);
JTable table = new JTable(model);
table.createDefaultColumnsFromModel();
String[] bloodGroups = { "A", "B", "AB", "O" };
JComboBox comboBox = new JComboBox(bloodGroups);
table.getColumnModel().getColumn(3).setCellEditor(new DefaultCellEditor(comboBox));
frame.add(new JScrollPane(table));
frame.setSize(300, 200);
frame.setVisible(true);
}
}
class EditableTableModel extends AbstractTableModel {
String[] columnTitles;
Object[][] dataEntries;
int rowCount;
public EditableTableModel(String[] columnTitles, Object[][] dataEntries) {
this.columnTitles = columnTitles;
this.dataEntries = dataEntries;
}
public int getRowCount() {
return dataEntries.length;
}
public int getColumnCount() {
return columnTitles.length;
}
public Object getValueAt(int row, int column) {
return dataEntries[row][column];
}
public String getColumnName(int column) {
return columnTitles[column];
}
public Class getColumnClass(int column) {
return getValueAt(0, column).getClass();
}
public boolean isCellEditable(int row, int column) {
return true;
}
public void setValueAt(Object value, int row, int column) {
dataEntries[row][column] = value;
}
}
So ich habe darauf hin ein anderes Beispiel erweitert, nur bei mir kommt nur Müll raus, sprich man kann den Wert der JCheckbox nicht ändern. Ich hab auch schon versucht mit den beiden Zeilen
Code:
table.getColumnModel().getColumn(1).setCellEditor(new DefaultCellEditor(new JCheckbox()));
table.createDefaultColumnsFromModel();
etwas zu erreichen aber fehlanzeige.
Hier mal mein Code
Code:
import java.awt.BorderLayout;
import java.util.Vector;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
public class TableTest
{
public static void main (String args[])
{
JFrame frame = new JFrame ("Editable Color Table");
frame.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
VTselectTableModel model = new VTselectTableModel();;
JTable table = new JTable (model);
Vector <Object> v1 = new Vector <Object> ( );
v1.add ("Power");
v1.add (new Boolean(false));
Vector <Object> v2 = new Vector <Object> ( );
v2.add ("Power Max");
v2.add (new Boolean(true));
model.addRow (v1);
model.addRow (v2);
table.createDefaultColumnsFromModel();
JScrollPane scrollPane = new JScrollPane (table);
frame.add (scrollPane, BorderLayout.CENTER);
frame.setSize (400, 150);
frame.setVisible (true);
}
}
Und das dazu gehörige Tablemodel
Code:
import java.util.Vector;
import javax.swing.event.TableModelListener;
import javax.swing.table.AbstractTableModel;
public class VTselectTableModel extends AbstractTableModel
{
/**
*
*/
private static final long serialVersionUID = -4021085690657315775L;
private Vector <TableModelListener> listeners = new Vector <TableModelListener> ( );
private Vector <Vector <Object>> dataEntries = new Vector <Vector <Object>> ( );
public void addTableModelListener (TableModelListener l)
{
listeners.add (l);
}
public void removeTableModelListener (TableModelListener l)
{
listeners.remove (l);
}
public Class <?> getColumnClass (int columnIndex)
{
switch (columnIndex)
{
case 0:
return String.class;
case 1:
return Boolean.class;
default:
return null;
}
}
public int getColumnCount ( )
{
// TODO Auto-generated method stub
return 2;
}
public String getColumnName (int columnIndex)
{
switch (columnIndex)
{
case 0:
return "ValueType";
case 1:
return "Selected";
default:
return null;
}
}
public int getRowCount ( )
{
// TODO Auto-generated method stub
return dataEntries.size ( );
}
public Object getValueAt (int rowIndex, int columnIndex)
{
Vector<Object> temp = dataEntries.get (rowIndex);
return temp.get (columnIndex);
}
public boolean isCellEditable (int rowIndex, int columnIndex)
{
return true;
}
public void setValueAt (Object value, int rowIndex, int columnIndex)
{
// TODO Auto-generated method stub
}
public void addRow(Vector<Object> row){
dataEntries.add (row);
}
}
Vielleicht kann mir ja jemand nen Tip geben...
gruß
keks[/code]