Odświeżenie Jtable

0

Jak można odświeżyć Data Model dla JTable - tzn chcemy by po kliknięciu użytkownik mógł np. zmienić ilość kolumn i ich typ?

0
:) napisał(a)

Jak można odświeżyć Data Model dla JTable - tzn chcemy by po kliknięciu użytkownik mógł np. zmienić ilość kolumn i ich typ?

Dokumentacja javy - jest metoda addColumn ,
http://java.sun.com/javase/6/docs/api/javax/swing/JTable.html
http://java.sun.com/javase/6/docs/api/javax/swing/table/TableColumn.html
Przykłady użycia JTable
http://www.codeguru.com/java/Swing/JTable/index.shtml
http://www.exampledepot.com/egs/javax.swing.table/pkg.html

0

Dzięki za wszystkie linki, ale nie o to mi chyba chodziło [???]. Może objaśnię lepiej tym bardziej. Tabele tworzy się na pewnym modelu danych (pobieranych np. z bazy danych przez jdbc i zastosowanie zapytania). W takim wypadku modyfikacja wychodzi daleko poza dodanie kolumny. I cały problem jest w tym, że nie mam pojęcia jak załadować inny schemat i przeładować JTable by wyświetlał inny result. Szukałem na stronie suna i nie tylko, jedyne co znalazłem do TableListenery, ale to chyba nie do tego pasuje :(

0
import java.awt.event.*;
import java.awt.*;
import javax.swing.*;
import java.io.*;
import java.util.*;
import javax.swing.table.AbstractTableModel;

public class MainWindow {

	private JFrame frame = new JFrame("Okno");
	private JButton b1 = new JButton("Click me");
	private JPanel p1 = new JPanel();
	private String[] nag = { "1", "2" };
	private String[][] dane = { {"1", "2"},
								{"1", "2"} };
	
	private JTable table = new JTable();
	private JScrollPane js = new JScrollPane();
	
	/* Inicjacja GUI */
    public MainWindow()
    {
    	p1 = new JPanel();
    	p1.setLayout(new GridLayout(2,1));
    	
    	ModelTabelki model = new ModelTabelki( dane, nag );
    	table = new JTable( model );
    	js = new JScrollPane( table );
    	   	
    	p1.add(js);
    	p1.add(b1);
    	
    	b1.addMouseListener( new MouseAdapter(){
    		public void mouseClicked(MouseEvent e){
    			String[] nag2 = { "1", "2","3" };
    			String[][] dane2 = { {"1", "2","3"},
									{"1", "2","3"} };
    			table.setModel(new ModelTabelki(dane2,nag2));			
    		};
    	});
    	
    	frame.setDefaultCloseOperation(frame.EXIT_ON_CLOSE);
    	
    	frame.setSize(300,300);
    	frame.add(p1);

    	frame.setVisible(true);
    }
    
    /* Najważniejsza rzecz poprawny Model !! */
    /* Wszystkie funkcjie są ważne */
	class ModelTabelki extends AbstractTableModel
	{
		Object[][] data;
		Object[] naglowek;
		public ModelTabelki(Object[][] dat, Object[] nag){
			data = dat;
			naglowek = nag;
		}
		public int getColumnCount() {
			if(naglowek!=null)
	       return naglowek.length;
			return 0;
		}
		public int getRowCount() {
		    	if(data!=null)
		        return data.length;
		    	return 0;
		}
		public String getColumnName(int col) {
	        return naglowek[col].toString();
	    }
		
		public Object getValueAt(int row, int col) {
	        return data[row][col];
	    }
		
		
	}
    
    public static void main(String[] args)
    {
            new MainWindow();
    }
}

To powinno Ci pomoc

0

Ehh zapomniałem dodać komentarz.

Jest to jeden ze sposobow na JTable( ja takiego modelu uzywam ) moze nie jest najladniejszy, najefektywniejszy no ale coz.
Najwazniejsze to poprawne zdefiniowanie AbstractTableModel musi zawierac podstawowe funkcje takie jak
-> Konstruktor
-> getColumnCount()
-> getRowCount()
-> getColumnName(int col)
-> getValueAt(int row, int col)
sa one niezbedne do poprawnego dzialania.
Reszte raczej zrozumiesz na tym prostym przykladzie.
Aha kompilowalem w Eclipse z java w ver 1.5.

0

Dzięki za odpowiedź. Wystarczyłoby podanie metody setModel( Nie wiem jak mogłem ją przeoczyć przeglądając javadoc.) :D, ale to też się przyda.

1 użytkowników online, w tym zalogowanych: 0, gości: 1