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, botów: 0