Nowy

Tworzenie tabeli Java za pomocą JTable

Tworzenie tabeli Java za pomocą JTable

Java zapewnia użyteczną klasę o nazwie JTable, która umożliwia tworzenie tabel podczas tworzenia graficznych interfejsów użytkownika przy użyciu komponentów Java Swing API. Możesz umożliwić użytkownikom edycję danych lub po prostu je przeglądać. Zauważ, że tabela nie zawiera danych - jest to w całości mechanizm wyświetlania.

Ten przewodnik krok po kroku pokaże, jak korzystać z klasy

JTable stworzyć prosty stół.

Uwaga: Jak każdy Swing GUI, musisz zrobić pojemnik, w którym będzie się wyświetlać

JTable . Jeśli nie masz pewności, jak to zrobić, zapoznaj się z tematem Tworzenie prostego graficznego interfejsu użytkownika.

Używanie tablic do przechowywania danych tabeli

Prosty sposób na dostarczenie danych dla

JTableklasa ma użyć dwóch tablic. Pierwszy zawiera nazwy kolumn w

Strunowyszyk:

Ciąg columnNames = {„Imię”, „Nazwisko”, „Kraj”
, „Event”, „Place”, „Time”, „World Record”};

Druga tablica to dwuwymiarowa tablica obiektów, która przechowuje dane dla tabeli. Tablica ta obejmuje na przykład sześciu pływaków olimpijskich:

Dane obiektu = {
{„César Cielo”, „Filho”, „Brazylia”, „50m freestyle”, 1, „21.30”, false},
{„Amaury”, „Leveaux”, „France”, „50m freestyle”, 2, „21.45”, false},
{„Eamon”, „Sullivan”, „Australia”, „100m freestyle”, 2, „47.32”, false},
{„Michael”, „Phelps”, „USA”, „200m freestyle”, 1, „1: 42.96”, false},
{„Ryan”, „Lochte”, „USA”, „200m styl grzbietowy”, 1, „1: 53,94”, prawda},
{„Hugues”, „Duboscq”, „France”, „100m styl klasyczny”, 3, „59,37”, false}
};

Kluczem tutaj jest upewnienie się, że dwie tablice mają taką samą liczbę kolumn.

Konstruowanie JTable

Po wprowadzeniu danych utworzenie tabeli jest prostym zadaniem. Po prostu zadzwoń

JTablekonstruktor i przekaż mu dwie tablice:

JTable table = new JTable (data, columnNames);

Prawdopodobnie będziesz chciał dodać paski przewijania, aby użytkownik mógł zobaczyć wszystkie dane. Aby to zrobić, umieść

JTablew

JScrollPane:

JScrollPane tableScrollPane = nowy JScrollPane (tabela);

Teraz, gdy tabela jest wyświetlana, zobaczysz kolumny i wiersze danych i będziesz mógł przewijać w górę i w dół.

Obiekt JTable zapewnia interaktywną tabelę. Jeśli klikniesz dwukrotnie dowolną komórkę, będziesz mógł edytować zawartość - chociaż każda edycja wpływa tylko na GUI, a nie na dane bazowe. (Aby obsłużyć zmianę danych, należy zaimplementować detektor zdarzeń).

Aby zmienić szerokość kolumn, najedź myszką na krawędź nagłówka kolumny i przeciągnij go w tę iz powrotem. Aby zmienić kolejność kolumn, kliknij i przytrzymaj nagłówek kolumny, a następnie przeciągnij go do nowej pozycji.

Sortowanie kolumn

Aby dodać możliwość sortowania wierszy, wywołaj

setAutoCreateRowSortermetoda:

table.setAutoCreateRowSorter (true);

Gdy ta metoda jest ustawiona na wartość true, możesz kliknąć nagłówek kolumny, aby posortować wiersze zgodnie z zawartością komórek w tej kolumnie.

Zmiana wyglądu stołu

Aby kontrolować widoczność linii siatki, użyj

setShowGridmetoda:

table.setShowGrid (true);

Aby całkowicie zmienić kolor tabeli, użyj

setBackgroundi

setGridColormetody:

table.setGridColor (Color.YELLOW);

table.setBackground (Color.CYAN);

Szerokości kolumn w tabeli są domyślnie równe. Jeśli pojemnik, w którym znajduje się stół, jest ponownie duży, wówczas szerokości kolumn rozszerzają się i kurczą, a pojemnik staje się większy lub mniejszy. Jeśli użytkownik zmieni rozmiar kolumny, szerokość kolumn po prawej stronie ulegnie zmianie, aby uwzględnić nowy rozmiar kolumny.

Początkowe szerokości kolumn można ustawić za pomocą metody setPreferredWidth lub kolumny. Użyj klasy TableColumn, aby najpierw uzyskać odwołanie do kolumny, a następnie metody setPreferredWidth, aby ustawić rozmiar:

TableColumn eventColumn = table.getColumnModel (). GetColumn (3);

eventColumn.setPreferredWidth (150);

TableColumn placeColumn = table.getColumnModel (). GetColumn (4);

placeColumn.setPreferredWidth (5);

Wybieranie wierszy

Domyślnie użytkownik może wybrać wiersze tabeli na jeden z trzech sposobów:

  • Aby wybrać pojedynczy wiersz, wybierz komórkę tabeli w tym wierszu.
  • Aby wybrać ciągłe, wiele wierszy, przeciągnij myszą nad kilkoma wierszami lub wybierz komórki tabeli, naciskając komórkę shift.
  • Aby wybrać nieciągłe, wiele wierszy, zaznacz komórki tabeli, przytrzymując Klawisz Control (klawisz polecenia dla komputerów Mac).

Korzystanie z modelu tabeli

Użycie kilku tablic do danych tabeli może być przydatne, jeśli potrzebujesz prostej tabeli opartej na łańcuchach, którą można edytować. Jeśli spojrzysz na tablicę danych, którą stworzyliśmy, zawiera ona inne typy danych niż

Smyczki-

Miejscekolumna zawiera

intsi

Rekord światakolumna zawiera

booleany. Jednak obie te kolumny są wyświetlane jako ciągi. Aby zmienić to zachowanie, utwórz model tabeli.

Model tabeli zarządza danymi, które mają być wyświetlane w tabeli. Aby zaimplementować model tabeli, możesz utworzyć klasę rozszerzającą

AbstractTableModelklasa:

public abstract class AbstractTableModel rozszerza Object implementuje TableModel, Serializable {

public int getRowCount ();

public int getColumnCount ();

obiekt publiczny getValueAt (int wiersz, int kolumna);

public String getColumnName (kolumna int;

public boolean isCellEditable (int rowIndex, int columnIndex);

klasa publiczna getColumnClass (int columnIndex);

}

Sześć powyższych metod jest używanych w tym przewodniku krok po kroku, ale istnieje więcej metod zdefiniowanych przez

AbstractTableModelklasy, które są przydatne w manipulowaniu danymi w pliku

JTableobiekt. Rozszerzając klasę na użycie

AbstractTableModel, musisz wdrożyć tylko

getRowCount,

getColumnCounti

getValueAtmetody

Utwórz nową klasę, wdrażając te pięć metod pokazanych powyżej:

klasa ExampleTableModel rozszerza AbstractTableModel {

Ciąg columnNames = {„Imię”, „Nazwisko”, „Kraj”

, „Event”, „Place”, „Time”, „World Record”};

Dane obiektu = {

{„César Cielo”, „Filho”, „Brazylia”, „50m freestyle”, 1, „21.30”, false},

{„Amaury”, „Leveaux”, „France”, „50m freestyle”, 2, „21.45”, false},

{„Eamon”, „Sullivan”, „Australia”, „100m freestyle”, 2, „47.32”, false},

{„Michael”, „Phelps”, „USA”, „200m freestyle”, 1, „1: 42.96”, false},

{„Larsen”, „Jensen”, „USA”, „400m freestyle”, 3, „3: 42.78”, false},

};

@Nadpisanie

public int getRowCount ()

{

zwróć data.length;

}

@Nadpisanie

public int getColumnCount ()

{

return columnNames.length;

}

@Nadpisanie

obiekt publiczny getValueAt (wiersz int, kolumna int)

{

zwraca kolumnę danych;

}

@Nadpisanie

public String getColumnName (kolumna int) {

return columnNamescolumn;

}@Nadpisanie

klasa publiczna getColumnClass (int c) {

return getValueAt (0, c) .getClass ();

}@Nadpisanie

public boolean isCellEditable (wiersz int, kolumna int)

{

if (kolumna == 1 || kolumna == 2)

{

zwracać fałsz;

}

jeszcze

{

zwróć prawdę;

}

}

}

W tym przykładzie ma to sens

ExampleTableModelklasa do przechowywania dwóch ciągów zawierających dane tabeli. A później

getRowCount, 

getColumnCount,

getValueAti

getColumnNamemetody mogą korzystać z tablic, aby podać wartości dla tabeli. Zauważ też, jak

isCellEditableMetoda została napisana, aby uniemożliwić edytowanie pierwszych dwóch kolumn.

Teraz zamiast używać dwóch tablic do tworzenia

JTableobiekt, możemy użyć

ExampleTableModelklasa:

JTable table = new JTable (new ExampleTableModel ());

Po uruchomieniu kodu zobaczysz, że

JTableobiekt korzysta z modelu tabeli, ponieważ żadnej z komórek tabeli nie można edytować, a nazwy kolumn są poprawnie używane. Jeśli…

getColumnNamemetoda nie została zaimplementowana, wówczas nazwy kolumn w tabeli byłyby wyświetlane jako domyślne nazwy A, B, C, D itp.

Rozważmy teraz metodę

getColumnClass. Samo to sprawia, że ​​model tabeli jest warty implementacji, ponieważ zapewnia

JTableobiekt z typem danych zawartym w każdej kolumnie. Jeśli pamiętasz, tablica danych obiektów ma dwie kolumny, które nie są

Strunowytypy danych:

Miejscekolumna zawierająca liczby całkowite oraz

Rekord światakolumna zawierająca

booleany. Znajomość tych typów danych zmienia funkcjonalność zapewnianą przez

JTableobiekt dla tych kolumn. Uruchomienie przykładowego kodu tabeli z zaimplementowanym modelem tabeli oznacza

Rekord światakolumna będzie faktycznie serią pól wyboru.

Dodanie edytora ComboBox

Możesz zdefiniować niestandardowe edytory dla komórek w tabeli. Na przykład, możesz uczynić pole kombi alternatywą dla standardowej edycji tekstu dla pola.

Oto przykład użycia

JComboBoxpole kraju:

Kraje ciągów = {„Australia”, „Brazylia”, „Kanada”, „Chiny”
, „Francja”, „Japonia”, „Norwegia”, „Rosja”, „Korea Południowa”
, „Tunezja”, „USA”};
JComboBox countryCombo = nowy JComboBox (kraje);

Aby ustawić domyślny edytor dla kolumny kraju, użyj

TableColumnklasa, aby uzyskać odniesienie do kolumny kraju i

setCellEditormetoda ustawienia

JComboBoxjako edytor komórek:

TableColumn countryColumn = table.getColumnModel (). GetColumn (2);
countryColumn.setCellEditor (nowy DefaultCellEditor (countryCombo));

Obejrzyj wideo: Kurs ORMLite - Table Utils - tworzenie tabel - #3 (Kwiecień 2020).