private void removeRow(int reihe, int Seite, DefaultTableModel model)
{
int selRow = tableList[Seite].getSelectedRow();
model.removeRow(reihe);
model.fireTableDataChanged();
tableList[Seite].repaint();
obj = null;
model = null;
row[Seite]--; // hier bekomme ich beim Debuggen diesen Fehler, keine Ahnug wieso
if (selRow != -1)
tableList[Seite].changeSelection(selRow-1, 0, false, false);
}
row[Seite-1]--;
int rows[] =int[5]
if (tableModelListen[x].getValueAt(i, 0) != null && tableModelListen[x].getValueAt(i, 2) != null)
{
/* hier liegt der Fehler, i = Reihe, x = Seite */ removeRow(i, x, (DefaultTableModel)tableList[x].getModel());
}
Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 1 >= 1
at java.util.Vector.elementAt(Vector.java:427)
at javax.swing.table.DefaultTableModel.getValueAt(DefaultTableModel.java:632)
at javax.swing.JTable.getValueAt(JTable.java:2652)
at javax.swing.JTable.prepareRenderer(JTable.java:5666)
...
public synchronized E elementAt(int index) {
if (index >= elementCount) {
throw new ArrayIndexOutOfBoundsException(index + " >= " + elementCount);
}
return (E)elementData[index];
}
Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 1 >= 1
e9926044 hat gesagt.:Ja das ist mir klar aber ich habe keine Ahnung wo das bei mir in Code ist, die Exception wirft der Compiler irgendwo, was soll ich da machen??
int[] row = new int[xSeiten];
der Entscheidende Code sieht so aus:
case 1: try {
for (int x = 0; x < alarmListenCnt; x++)
{
for (int i = 0; i < row[x]; i++)
{
if (alarmNr.equals(tableModelListen[x].getValueAt(i, 4)) && tableModelListen[x].getValueAt(i, 1) == null) // welche Zeile ist die gesuchte
{
//addQuitButton(i, x);
tableList[x].setValueAt(gegangen.toString(), i, 1);
tableList[x].repaint();
time = tableModelListen[x].getValueAt(i, 0).toString();
alarmNr = tableModelListen[x].getValueAt(i, 4).toString();
if (tableModelListen[x].getValueAt(i, 0) != null && tableModelListen[x].getValueAt(i, 2) != null)
/* hier liegt der Fehler, i = Reihe, x = Seite */ removeRow(i, x, (DefaultTableModel)tableList[x].getModel());
}
}
}
}
catch (Exception exce){}
break;
// i, x, das wird oben übergeben
private void removeRow(int reihe, int xSeite, DefaultTableModel model)
{
int selRow = tableList[xSeite].getSelectedRow();
//tableList[xSeite].setValueAt(null, reihe, 6);
model.removeRow(reihe);
model.fireTableDataChanged();
tableList[xSeite].repaint();
addReihe(model, xSeite);
model = null;
row[xSeite]--;
if (selRow != -1)
tableList[xSeite].changeSelection(selRow-1, 0, false, false);
}
ms hat gesagt.:e9926044 hat gesagt.:Ja das ist mir klar aber ich habe keine Ahnung wo das bei mir in Code ist, die Exception wirft der Compiler irgendwo, was soll ich da machen??
Der Compiler wirft keine Exception.
Im Stacktrace wird dir die Zeile im Code angezeigt, wo der Fehler auftritt.
Genau dort passiert das.
Und was der Grund ist wurde ja schon erwähnt.
ms
for (int i = 0; i < row[x]; i++)
row[xSeite]--;
for (int i = 0; i < row[x]; i++)
row[xSeite]--;
row[xSeite]--;
for (int i = 0; i < row[x]; i++)
Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 1 >= 1
case 1: for (int x = 0; x < listenCnt; x++)
{
for (int i = 0; i < row[x]; i++)
{
if (alNr.equals(tableModelListen[x].getValueAt(i, 4)) && tableModelListen[x].getValueAt(i, 1) == null)
{
tableList[x].setValueAt(gegangen.toString(), i, 1);
tableList[x].repaint();
if (tableModelListen[x].getValueAt(i, 0) != null && tableModelListen[x].getValueAt(i, 2) != null)
{
/* hier liegt der Fehler, i = Reihe, x = Seite */ removeReihe(i, x, (DefaultTableModel)tableList[x].getModel());
row[x]--;
}
}
}
}
break;
private void removeReihe(int reihe, int xSeite, DefaultTableModel model)
{
model.removeRow(reihe);
model.fireTableDataChanged();
tableList[xSeite].repaint();
// addReihe(model, xSeite); // wenn diese Zeile nicht auskommentiert ist, dann funktionierts, aber ich habe halt in der JTable ein paar Zeilen, wo gar nichts ausgefüllt ist aber ich möchte, das nur die Zeilen angezeit werden, wo irgendetwas drinnensteht, also ich möchte keine leeren Zeilen in meiner JTable
model = null;
}
private void addReihe(DefaultTableModel model, int xSeite)
{
Object[] obj = {};
model.addRow(obj);
obj = null;
}
private void addReihe(DefaultTableModel model, int xSeite)
{
Object[] obj = {};
model.addRow(obj);
obj = null;
}
Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 4 >= 4
at java.util.Vector.elementAt(Vector.java:427)
at javax.swing.table.DefaultTableModel.getValueAt(DefaultTableModel.java:632)
at javax.swing.JTable.getValueAt(JTable.java:2652)
at net.component.table.getCellRenderer(table.java:47)
at javax.swing.plaf.basic.BasicTableUI.paintCell(BasicTableUI.java:2066)
at javax.swing.plaf.basic.BasicTableUI.paintCells(BasicTableUI.java:1969)
at javax.swing.plaf.basic.BasicTableUI.paint(BasicTableUI.java:1765)
at javax.swing.plaf.ComponentUI.update(ComponentUI.java:143)
at javax.swing.JComponent.paintComponent(JComponent.java:758)
at javax.swing.JComponent.paint(JComponent.java:1022)
at javax.swing.JComponent.paintToOffscreen(JComponent.java:5104)
at javax.swing.BufferStrategyPaintManager.paint(BufferStrategyPaintManager.java:285)
at javax.swing.RepaintManager.paint(RepaintManager.java:1132)
at javax.swing.JComponent._paintImmediately(JComponent.java:5052)
at javax.swing.JComponent.paintImmediately(JComponent.java:4862)
at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:727)
at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:683)
at javax.swing.RepaintManager.seqPaintDirtyRegions(RepaintManager.java:663)
at javax.swing.SystemEventQueueUtilities$ComponentWorkRequest.run(SystemEventQueueUtilities.java:128)
at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:209)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:597)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:273)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:183)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:173)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:168)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:160)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:121)
Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 2 >= 2
at java.util.Vector.elementAt(Vector.java:427)
at javax.swing.table.DefaultTableModel.getValueAt(DefaultTableModel.java:632)
at javax.swing.JTable.getValueAt(JTable.java:2652)
at net.component.JankTable.getCellRenderer(table.java:47)
at javax.swing.plaf.basic.BasicTableUI.paintCell(BasicTableUI.java:2066)
at javax.swing.plaf.basic.BasicTableUI.paintCells(BasicTableUI.java:1969)
at javax.swing.plaf.basic.BasicTableUI.paint(BasicTableUI.java:1765)
usw.
public class TestGUI
extends JFrame
{
JTable[] tableList = new JTable[1];
DefaultTableModel[] tableModelListen = new DefaultTableModel[1];
int[] row = new int[1];
public TestGUI()
throws Exception
{
tableModelListen[0] = new DefaultTableModel(10, 1);
row[0] =tableModelListen[0].getRowCount();
for (int i = 0; i < row[0]; i++)
{
tableModelListen[0].setValueAt("" + i, i, 0);
}
tableList[0] = new JTable(tableModelListen[0]);
JButton b = new JButton("test");
b.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
action();
}
});
getContentPane().add(tableList[0], BorderLayout.CENTER);
getContentPane().add(b, BorderLayout.SOUTH);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(800, 400);
setVisible(true);
}
public static void main(String[] args)
throws Exception
{
TestGUI g = new TestGUI();
for (int i = 0; i < 1000; i++)
{
Thread.sleep(30);
g.repaint();
}
}
private void action()
{
int listenCnt = tableList.length;
for (int x = 0; x < listenCnt; x++)
{
for (int i = 0; i < row[x]; i++)
{
tableList[x].setValueAt("test", i, 0);
tableList[x].repaint();
boolean random = Math.random() > 0.5;
if (random)
{
System.out.println("entferne Reihe i: " + i);
removeReihe(i, x, (DefaultTableModel)tableList[x].getModel());
row[x]--;
}
}
}
}
private void removeReihe(int reihe, int xSeite, DefaultTableModel model)
{
model.removeRow(reihe);
model.fireTableDataChanged();
tableList[xSeite].repaint();
// addReihe(model, xSeite);
model = null;
}
private void addReihe(DefaultTableModel model, int xSeite)
{
Object[] obj =
{};
model.addRow(obj);
obj = null;
}
}
for (int i = 0; i < 10; i++)
{
SwingUtilities.invokeLater(new Runnable() {
public void run() {
// wie kann ich hier auf i zugreifen, ich glaub, es gibt 2 möglichkeiten, entweder die Variable final machen oder irgendwo anders deklarieren,
Kann ich das anders auch noch irgendwie machen?
}});
}