G
Guest
Gast
Hi Leute,
ich schreibe eine GUI Anwendung in der auch ein JTable vorkommt. Ich möchte ein Tabellen- und ein Spaltenmodell verwenden.
Allerdings habe ich folgendes Problem:
Wenn getValueAt oder setValueAt aufgerufen werden, wird als Spaltenindex immer der Wert Null übergeben,
auch wenn ich als Methodenargument explizit einen anderen Wert angebe. Ich habe das mit print befehlen an stdout
in der überlagerten Funktion im Tabellenmodell überprüft (s.u.). Um das ganze mal zu posten habe ich ein Beispiel
gestrickt, welches das Problem reproduziert:
Hat jemand ne Idee woran das liegen könnte? Wär echt superdankbar!
ich schreibe eine GUI Anwendung in der auch ein JTable vorkommt. Ich möchte ein Tabellen- und ein Spaltenmodell verwenden.
Allerdings habe ich folgendes Problem:
Wenn getValueAt oder setValueAt aufgerufen werden, wird als Spaltenindex immer der Wert Null übergeben,
auch wenn ich als Methodenargument explizit einen anderen Wert angebe. Ich habe das mit print befehlen an stdout
in der überlagerten Funktion im Tabellenmodell überprüft (s.u.). Um das ganze mal zu posten habe ich ein Beispiel
gestrickt, welches das Problem reproduziert:
Code:
/* Classfile Listing3808.java */
import java.awt.*;
import javax.swing.*;
import javax.swing.table.*;
public class Listing3808
extends JFrame
{
public Listing3808()
{
super("JTable 3");
//Spaltenmodell erzeugen
DefaultTableColumnModel cm = new tablColModel();
TableColumn colNames = new TableColumn();
colNames.setHeaderValue("Name");
cm.addColumn(colNames);
TableColumn colValue = new TableColumn();
colValue.setHeaderValue("Value");
cm.addColumn(colValue);
//Tabellenmodell erzeugen
tablModel tm = new tablModel(2);
//Tabelle erzeugen und ContentPane füllen
JTable table = new JTable(tm, cm);
int i;
for (i=0; i < 2; i++)
{
table.setValueAt("Name", i, 0);
int column = 1;
System.out.println("column = "+column); //XXX Ich übergebe wirklich eine 1!
table.setValueAt("Value", i, column);
}
Container cp = getContentPane();
cp.add(new JScrollPane(table), BorderLayout.CENTER);
}
public static void main(String[] args)
{
Listing3808 frame = new Listing3808();
frame.setLocation(100, 100);
frame.setSize(350, 200);
frame.setVisible(true);
}
}
/* Classfile tablColModel.java */
import javax.swing.table.*;
public class tablColModel
extends DefaultTableColumnModel
{
public tablColModel()
{
super();
this.setColumnMargin(0);
}
public boolean getColumnSelectionAllowed()
{
return false;
}
public void moveColumn(int arg0, int arg1)
{
}
public void removeColumn(TableColumn arg0)
{
}
}
/* Classfile tablModel.java */
import javax.swing.table.*;
import java.util.*;
public class tablModel
extends AbstractTableModel
{
private int nrOfRows;
private Hashtable data;
public tablModel(int nrOfRows)
{
this.nrOfRows = nrOfRows;
this.data = new Hashtable();
}
public int getColumnCount()
{
return 2;
}
public int getRowCount()
{
return this.nrOfRows;
}
public String getColumnName(int columnIndex)
{
return null;
}
public Object getValueAt(int rowIndex, int columnIndex)
{
//XXX Dieser printbefehl liefert immer 0, auch wenn ich die Methode z.B. mit Argument (1,1) aufrufe
System.out.println("tablModel.getValueAt reports: columnIndex = "+columnIndex);
//XXX
String key = "[" + rowIndex + "," + columnIndex + "]";
String value = (String)data.get(key);
return value == null ? "-" : value;
}
public void setValueAt(Object aValue, int rowIndex, int columnIndex)
{
System.out.println("tablModel.setValueAt reports: columnIndex = "+columnIndex);
String key = "[" + rowIndex + "," + columnIndex + "]";
String value = (String)aValue;
if (value.length() <= 0)
{
data.remove(key);
}
else
{
data.put(key, value);
}
}
}
Hat jemand ne Idee woran das liegen könnte? Wär echt superdankbar!