A
acdc
Gast
Hallo,
ich habe hier folgendes Programm, welches die Header der Tabelle ändern soll:
Das Problem ist nun, wenn ich mit der Rechen Maustaste auf einen SpaltenKopf klicke, kommt der Dialog und ich gebe einen neuen Namen ein. nach dem Klick auf ok kommt die exeption:
Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: -1
at java.util.Vector.elementAt(Vector.java:430)
at javax.swing.table.DefaultTableColumnModel.getColumn(DefaultTableColumnModel.java:277)
at javax.swing.plaf.basic.BasicTableHeaderUI.getHeaderRenderer(BasicTableHeaderUI.java:654)
at javax.swing.plaf.basic.BasicTableHeaderUI.paintCell(BasicTableHeaderUI.java:670)
..usw
das Ganze funktioniert aber, wenn ich den Aufruf so gestalte:
nur muss man hier mit der Maus auf die Spalte klicken und nicht auf die Überschrift.
Außderdem funktioniert der Typcast in
nicht mehr.
Hat jemand eine Idee wie ich das Problem beheben kann, bzw. gibt es eine bessere Möglichkeit die Tabellenüberschrift per Mausklick zu ändern?
(aber nicht nur die daten von der Klasse JTabel, sondern wirklich das model)
vielen Danke für eure Antworten und ich hoffe ich habe alle relevanten infos hier gepostet!
ich habe hier folgendes Programm, welches die Header der Tabelle ändern soll:
Java:
package deskapp1;
import java.awt.Point;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.Vector;
import javax.swing.table.JTableHeader;
import javax.swing.table.TableColumnModel;
class HeaderSelector extends MouseAdapter
{
OwnTableModel tableModel;
Vector newData;
public HeaderSelector(OwnTableModel tModel)
{
tableModel = tModel;
newData=new Vector();
}
public void mousePressed(MouseEvent e)
{
if(e.getButton()==MouseEvent.BUTTON3) //nur wenn die rechte Maustaste gedrückt wird
{
JTableHeader th = (JTableHeader)e.getSource();
Point p = e.getPoint();
int col = getColumn(th, p);
InputDialog input=new InputDialog();
input.viewDialog();
if(input.getValue())
{
newData=tableModel.getColumnIdentifiers(); //Eigene Methode in OwnTableModel "return columnIdentifiers"
newData.insertElementAt(input.getText(),col); // neuer Text aus eigenem Dialog
newData.remove(col+1);
tableModel.setColumnIdentifiers(newData);
}
}
}
private int getColumn(JTableHeader th, Point p)
{
TableColumnModel model = th.getColumnModel();
for(int col = 0; col < model.getColumnCount(); col++)
if(th.getHeaderRect(col).contains(p))
return col;
return -1;
}
}
Aufruf:
Tabelle1.setModel(modelT1);
Tabelle1.getTableHeader().addMouseListener(new HeaderSelector(modelT1));
Das Problem ist nun, wenn ich mit der Rechen Maustaste auf einen SpaltenKopf klicke, kommt der Dialog und ich gebe einen neuen Namen ein. nach dem Klick auf ok kommt die exeption:
Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: -1
at java.util.Vector.elementAt(Vector.java:430)
at javax.swing.table.DefaultTableColumnModel.getColumn(DefaultTableColumnModel.java:277)
at javax.swing.plaf.basic.BasicTableHeaderUI.getHeaderRenderer(BasicTableHeaderUI.java:654)
at javax.swing.plaf.basic.BasicTableHeaderUI.paintCell(BasicTableHeaderUI.java:670)
..usw
das Ganze funktioniert aber, wenn ich den Aufruf so gestalte:
Java:
Tabelle1.addMouseListener(new HeaderSelector(modelT1));
Außderdem funktioniert der Typcast in
Java:
JTableHeader th = (JTableHeader)e.getSource();
Hat jemand eine Idee wie ich das Problem beheben kann, bzw. gibt es eine bessere Möglichkeit die Tabellenüberschrift per Mausklick zu ändern?
(aber nicht nur die daten von der Klasse JTabel, sondern wirklich das model)
vielen Danke für eure Antworten und ich hoffe ich habe alle relevanten infos hier gepostet!