Hallo,
so jetzt das richtige Problem, nachdem ich das Beispiel endlich hingekriegt habe.
Also, ich habe eine JTable mit einem TableSorter als Model. Dieser wiederrum bekommt mein eigenes Model.
Nun hab ich folgendes Problem:
Wenn ich jetzt über getSelectedRow den ausgewählten Datensatz haben will, liefert er mir das falsche, wenn neu sortiert wurde.
Ich weiß, dass das ein bekanntes Problem ist und auch dass es convertRowToModel gibt, aber nicht unter java 1.5. Gibt es da auch eine Alternative, wie ich das möglichst einfach lösen kann?
falls es was hilft, hier das Beispiel:
und das Model:
so jetzt das richtige Problem, nachdem ich das Beispiel endlich hingekriegt habe.
Also, ich habe eine JTable mit einem TableSorter als Model. Dieser wiederrum bekommt mein eigenes Model.
Nun hab ich folgendes Problem:
Wenn ich jetzt über getSelectedRow den ausgewählten Datensatz haben will, liefert er mir das falsche, wenn neu sortiert wurde.
Ich weiß, dass das ein bekanntes Problem ist und auch dass es convertRowToModel gibt, aber nicht unter java 1.5. Gibt es da auch eine Alternative, wie ich das möglichst einfach lösen kann?
falls es was hilft, hier das Beispiel:
Code:
public class GuiTests extends JFrame {
JTable textTable;
JPanel mainPanel;
JTextPane textPane;
JScrollPane scrollPane;
Model myModel;
public GuiTests(){
mainPanel = new JPanel();
mainPanel.setLayout(new BorderLayout(20,20));
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
myModel = new Model();
TableSorter sorter = new TableSorter(myModel);
textTable = new JTable(sorter);
textTable.setRowSelectionAllowed(true);
JTableHeader header = textTable.getTableHeader();
sorter.setTableHeader(header);
scrollPane = new JScrollPane(textTable);
UnmodifiedText test1 = new UnmodifiedText(Long.valueOf(1), "test1");
UnmodifiedText test2 = new UnmodifiedText(Long.valueOf(2), "test2");
myModel.addText(test1);
myModel.addText(test2);
textTable.addMouseListener(new MouseAdapter() {
public void mouseClicked(final MouseEvent e) {
if (e.getClickCount() == 2) {
UnmodifiedText text = myModel.getRow(textTable
.getSelectedRow());
System.out.println(textTable.getSelectedRow()+" "+ text.getText());
}
}
});
mainPanel.add(scrollPane,BorderLayout.CENTER);
this.add(mainPanel);
}
public static void main(String[]args){
GuiTests testFrame = new GuiTests();
testFrame.pack();
testFrame.setVisible(true);
}
}
und das Model:
Code:
class Model implements TableModel{
private Vector texts = new Vector();
private Vector listeners = new Vector();
public void addText( UnmodifiedText text ){
int index = texts.size();
texts.add( text );
TableModelEvent e = new TableModelEvent( this, index, index,
TableModelEvent.ALL_COLUMNS, TableModelEvent.INSERT );
for( int i = 0, n = listeners.size(); i<n; i++ ){
((TableModelListener)listeners.get( i )).tableChanged( e );
}
}
public int getColumnCount() {
return 2;
}
public int getRowCount() {
return texts.size();
}
public String getColumnName(int column) {
switch( column ){
case 0: return "Id";
case 1: return "Text";
default: return null;
}
}
public Object getValueAt(int rowIndex, int columnIndex) {
UnmodifiedText text = (UnmodifiedText)texts.get( rowIndex );
switch( columnIndex ){
case 0: return text.getId();
case 1: return text.getText();
default: return null;
}
}
public UnmodifiedText getRow(int rowIndex){
UnmodifiedText text = (UnmodifiedText)texts.get( rowIndex );
return text;
}
public Class getColumnClass(int columnIndex) {
switch( columnIndex ){
case 0: return Long.class;
case 1: return String.class;
default: return null;
}
}
public void addTableModelListener(TableModelListener l) {
listeners.add( l );
}
public void removeTableModelListener(TableModelListener l) {
listeners.remove( l );
}
public boolean isCellEditable(int rowIndex, int columnIndex) {
return false;
}
public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
// nicht beachten
}
}