1. Dashboard
  2. Forum
    1. Unerledigte Themen
  3. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team-Mitglieder
    4. Trophäen
    5. Mitgliedersuche
  4. Tutorial Bereich
  • Anmelden
  • Registrieren
  • Suche
Dieses Thema
  • Alles
  • Dieses Thema
  • Dieses Forum
  • Seiten
  • Forum
  • Lexikon
  • Erweiterte Suche
  1. Informatik Forum
  2. Webmaster & Internet
  3. Entwicklung

JScrollPane + Jtable --> ArrayIndexOutOfBounds

    • Frage
  • rul0r
  • 9. April 2008 um 16:15
  • Unerledigt
  • rul0r
    10
    rul0r
    Mitglied
    Punkte
    975
    Beiträge
    182
    • 9. April 2008 um 16:15
    • #1

    Hi

    hab ein sehr lästiges problem.
    Ich hab ein jtable in einem jscrollpane.
    Das jtable hat ein model welches ich vom abstracttablemodel abgeleitet hab.
    Wenn ich jetzt beim starten meines programms das model mit daten befülle(mehr als in den aktuellen viewport reinpassen) und dann der table das model zuweise wird alles richtig angezeigt.

    wenn ich dann nachträglich daten aus dem model rauslösche(zb dass nur mehr 2 zeilen drinnen sind) und danach ein fireTableData(Structure)Changed() aufruf is das dem scrollpane vollkommen wurscht. die scrollbar is noch imemr so groß wie vorher und sobald ich scrollen will haut er mir eine arrayindexoutofbounds exception(bei getValueAt vom model[getRowCount is zb 2, trotzdem will er auf 2,2 zugreifen]).
    ich schaffs einfach nicht dem scrollpane zu sagen es soll sich neu aufbauen.
    reload,revalidate,viewport neu setzen is ihm alles wurscht.
    habts ihr eine idee wie ich das lösen kann?

    {WcM} http://www.wcm-clan.com
    ClanManagerPro CMPro http://www.cmpro.org

    Der genetische Code des Menschen und der des Schimpansen unterscheiden sich zu 1,6%.
    Bei machen Menschen merkt man das mehr, bei anderen weniger *g*

  • rul0r
    10
    rul0r
    Mitglied
    Punkte
    975
    Beiträge
    182
    • 14. April 2008 um 17:08
    • #2

    na kommts schon irgendwas muss euch ja einfallen :face_with_tongue:

    {WcM} http://www.wcm-clan.com
    ClanManagerPro CMPro http://www.cmpro.org

    Der genetische Code des Menschen und der des Schimpansen unterscheiden sich zu 1,6%.
    Bei machen Menschen merkt man das mehr, bei anderen weniger *g*

  • java-girl
    14
    java-girl
    Mitglied
    Reaktionen
    7
    Punkte
    2.037
    Beiträge
    357
    • 15. April 2008 um 14:09
    • #3

    Wenn du doppelpostet wird auch nicht mehr Leuten was einfallen.

    Wenn du den Code postest vielleicht schon.

    There's no better place than 127.0.0.1!

  • rul0r
    10
    rul0r
    Mitglied
    Punkte
    975
    Beiträge
    182
    • 22. April 2008 um 12:25
    • #4

    Userinterface - da hab ich schon etwas herumprobiert deshalb die ganzen kommentare

    Code
    private JScrollPane getJScrollPane() {
    		if (jScrollPane == null) {
    			jScrollPane = new JScrollPane();
    			jScrollPane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
    			jScrollPane.setViewportView(getJTable());
    
    		}
    		return jScrollPane;
    	}
    	/**
    	 * This method initializes jTable	
    	 * 	
    	 * @return javax.swing.JTable	
    	 */
    	private JTable getJTable() {
    		if (jTable == null) {
    			jTable = new JTable();
    			jTable.setAutoResizeMode(JTable.AUTO_RESIZE_ALL_COLUMNS);
    			jTable.setModel(KapitelTableModel);
    	//		KapitelTableModel.fireTableDataChanged();
    			jTable.addMouseListener(new MouseAdapter() {
    				public void mouseClicked(MouseEvent e) {
    					int row = jTable.getSelectedRow();
    					if (row > -1) {	
    						if(jTable2.getModel().getRowCount()>1)//model wurde schon einmal geladen
    							jTable2.setModel(new CodeTableModel());
    						GruppenTableModel=new GruppenTableModel(KapitelTableModel.getKapitel(row));
    						jTable1.setModel(GruppenTableModel);
    						jTable1.setRowSorter(new TableRowSorter<GruppenTableModel>(GruppenTableModel));
    					}
    				}
    			});
    			jTable.setRowSorter(new TableRowSorter<KapitelTableModel>(KapitelTableModel)); //TODO für alle tabellen impl
    		}
    		return jTable;
    	}
    
    
    ....
    
    
    private JRadioButton getJRadioButton1() {
    		if (jRadioButton1 == null) {
    			jRadioButton1 = new JRadioButton();
    			jRadioButton1.setBounds(new Rectangle(125, 6, 21, 21));
    			jRadioButton1.addActionListener(new java.awt.event.ActionListener() {
    				 public void actionPerformed(java.awt.event.ActionEvent e) {
    					 log.debug("Switching Katalog");		
    					 setup.setKatalog(2);
    					 jProgressBar.setIndeterminate(true);
    					 suche.refreshData(setup.getKatalog());
    					 jProgressBar.setIndeterminate(false);
    					KapitelTableModel = new KapitelTableModel(setup);
    					KapitelTableModel.fireTableDataChanged();
    					jTable.setModel(KapitelTableModel);
    		//			KapitelTableModel.fireTableStructureChanged();//TODO BUG: viewport wird nicht upgedatet
    					jTable.tableChanged(new TableModelEvent(KapitelTableModel));
    					jScrollPane.setViewportView(jTable);
    					jScrollPane.revalidate();
    					jTable.invalidate();
    					jTable.repaint();
    					//jScrollPane.updateUI();
    		//			jScrollPane.setViewportView(jTable);
    		//			repaint();
    		/*			jTable.tableChanged(new TableModelEvent(KapitelTableModel));
    					jScrollPane.setViewportView(jTable);
    					jTable=null;*/
    			/*		jTable.setModel(KapitelTableModel);
    					KapitelTableModel.fireTableStructureChanged();
    					KapitelTableModel.fireTableDataChanged();
    					jTable.repaint();
    					jScrollPane.repaint();*/
    				//	jScrollPane.
    					//jTable.setModel(KapitelTableModel);
    					//jScrollPane.getViewport().add(jTable);
    
    					 }});
    		}
    		return jRadioButton1;
    	}
    Alles anzeigen

    KapitelTableModel

    Code
    public class KapitelTableModel extends AbstractTableModel {
    	/**
    	 * Retrieve a logger for this class
    	 */
    	private Setup setup=new Setup();
    	private static Log log = LogFactory.getLog("basis.model");
    	/**
    	 * Defines the Names of the Columns of the TableModel.
    	 */
    	private final String[] columnName = { "Kapitel"};
    	private KapitelDAO KapitelDAO=new JDBCObjectKapitelDAO();
    	private Vector<Kapitel> kapitel=new Vector<Kapitel>();
    	public KapitelTableModel(Setup setup) {
    		super();
    		this.setup=setup;
    		readData();
    	}
    	private void readData(){
    		log.debug("Reading kataloge");
    		kapitel.removeAllElements();
    		if(setup.getKatalog()==2){ //TODO DEBUG!
    			System.out.println("Debug");
    			Kapitel c=new Kapitel();
    			c.setKTitel("1");
    			kapitel.add(c);
    			c.setKTitel("2");
    			kapitel.add(c);
    			System.out.println(getRowCount());
    		}
    		else kapitel=KapitelDAO.getKapitel(setup.getKatalog()); //da kommt ein vector zurück(das funktioniert)
    		if(kapitel==null) log.error("Kapitel == null");
    		fireTableStructureChanged();
    	}
    	public int getColumnCount() {
    		return 1;
    	}
    
    
    	public int getRowCount() {
    	//	log.debug("Row Count:"+kapitel.size());
    		return kapitel.size();
    	}
    
    
    	public Object getValueAt(int rowIndex, int columnIndex) {
    	//	log.debug("Get object at "+rowIndex+"/"+columnIndex);
    		System.out.println(getRowCount()+" "+rowIndex);
    		return kapitel.elementAt(rowIndex).getKTitel();
    	}
    	public Kapitel getKapitel(int index){
    	//	log.debug("Requesting KapNr for Kapitel at "+index);
    		return kapitel.elementAt(index);
    	}
    	public String getColumnName(int c) {
    		log.debug("colName = " + columnName[c]);
    		return columnName[c];
    	}
    
    
    }
    Alles anzeigen

    {WcM} http://www.wcm-clan.com
    ClanManagerPro CMPro http://www.cmpro.org

    Der genetische Code des Menschen und der des Schimpansen unterscheiden sich zu 1,6%.
    Bei machen Menschen merkt man das mehr, bei anderen weniger *g*

  • rul0r
    10
    rul0r
    Mitglied
    Punkte
    975
    Beiträge
    182
    • 16. Mai 2008 um 13:04
    • #5

    problem gelöst:
    man darf nach dem ändern des models dieses _nicht_ neu zur tabelle hinzufügen.
    es reicht wenn man nachdem das model geändert wurde IM model fireTabledataChanged() aufruft.

    {WcM} http://www.wcm-clan.com
    ClanManagerPro CMPro http://www.cmpro.org

    Der genetische Code des Menschen und der des Schimpansen unterscheiden sich zu 1,6%.
    Bei machen Menschen merkt man das mehr, bei anderen weniger *g*

  • Maximilian Rupp 27. Dezember 2024 um 12:04

    Hat das Thema aus dem Forum Programmieren nach Entwicklung verschoben.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!

Benutzerkonto erstellen Anmelden

Benutzer online in diesem Thema

  • 1 Besucher

Rechtliches

Impressum

Datenschutzerklärung