Java bietet eine nützliche Klasse namens JTable, mit der Sie Tabellen erstellen können, wenn Sie grafische Benutzeroberflächen mithilfe der Swing-API-Komponenten von Java entwickeln. Sie können Benutzern erlauben, die Daten zu bearbeiten oder sie nur anzuzeigen. Beachten Sie, dass die Tabelle keine tatsächlichen Daten enthält, sondern lediglich einem Anzeigemechanismus dient.
Hinweis: Wie bei jeder Swing-GUI müssen Sie einen Container erstellen, um die JTable anzuzeigen.
Verwenden von Arrays zum Speichern von Tabellendaten
Eine einfache Möglichkeit, Daten für die JTable-Klasse bereitzustellen, ist die Verwendung von zwei Arrays. Das erste speichert die Spaltennamen in einem String-Array:
String[] columnNames = {"First Name", "Surname", "Country" , "Event", "Place", "Time", "World Record" };
Das zweite Array ist ein zweidimensionales Objektarray, das zum Speichern der Tabellendaten verwendet wird. Dieses Array umfasst beispielsweise sechs olympische Schwimmer:
Object[][] data = { {"César Cielo", "Filho", "Brazil", "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 backstroke", 1, "1:53.94", true }, {"Hugues", "Duboscq", "France", "100m breaststroke", 3, "59.37", false } };
Der Schlüssel hier besteht darin, sicherzustellen, dass beide Arrays die gleiche Anzahl von Spalten haben.
Erstellen einer JTable
Sobald Sie Ihre Daten haben, ist das Erstellen einer Tabelle eine einfache Aufgabe. Rufen Sie einfach den JTable-Konstruktor auf und übergeben Sie ihm zwei Arrays:
JTable table = new JTable(data, columnNames);
Möglicherweise möchten Sie Bildlaufleisten hinzufügen, um sicherzustellen, dass der Benutzer alle Daten sehen kann. Platzieren Sie dazu die JTable in einem JScrollPane:
JScrollPane tableScrollPane = new JScrollPane(table);
Wenn die Tabelle nun angezeigt wird, sehen Sie die Spalten und Zeilen mit Daten und können nach oben und unten scrollen.
Das JTable-Objekt stellt eine interaktive Tabelle bereit. Wenn Sie auf eine beliebige Zelle doppelklicken, können Sie deren Inhalte bearbeiten. Allerdings wirken sich alle Änderungen nur auf die GUI aus, nicht auf die zugrunde liegenden Daten. (Ein Ereignis-Listener muss implementiert werden, um Änderungen an Daten zu verarbeiten.)
Um die Breite einer Spalte zu ändern, bewegen Sie den Mauszeiger über den Rand der Spaltenüberschrift und ziehen Sie ihn hin und her. Um die Reihenfolge der Spalten zu ändern, klicken Sie auf die Spaltenüberschrift, halten Sie die Maustaste gedrückt und ziehen Sie sie dann an eine neue Position.
Spalten sortieren
Um die Möglichkeit zum Sortieren von Zeilen hinzuzufügen, rufen Sie die setAutoCreateRowSorter-Methode auf:
table.setAutoCreateRowSorter(true);
Wenn diese Methode auf true gesetzt ist, können Sie dies tun Klicken Sie auf eine Spaltenüberschrift, um die Zeilen basierend auf dem Inhalt der Zellen unter dieser Spalte zu sortieren.
Ändern Sie das Erscheinungsbild der Tabelle
Um die Sichtbarkeit der Gitterlinien zu steuern, verwenden Sie die folgende setShowGrid-Methode:
table.setShowGrid(true);
Um das vollständig zu ändern Um die Farbe der Tabelle zu ändern, verwenden Sie bitte die Methoden setBackground und setGridColor:
table.setGridColor(Color.YELLOW); table.setBackground(Color.CYAN);
Standardmäßig sind die Spaltenbreiten der Tabelle gleich. Wenn die Größe des Containers, in dem sich die Tabelle befindet, geändert werden kann, wird die Breite der Spalten vergrößert und verkleinert, und der Container wird größer oder kleiner. Wenn der Benutzer die Größe der Spalte ändert, ändert sich die Breite der rechten Spalte, um sie an die neue Spaltengröße anzupassen.
Die anfängliche Spaltenbreite kann mithilfe der setPreferredWidth-Methode oder -Spalte festgelegt werden. Verwenden Sie die TableColumn-Klasse, um zunächst einen Verweis auf die Spalte abzurufen, und legen Sie dann die Größe mithilfe der setPreferredWidth-Methode fest:
TableColumn eventColumn = table.getColumnModel().getColumn(3); eventColumn.setPreferredWidth(150); TableColumn placeColumn = table.getColumnModel().getColumn(4); placeColumn.setPreferredWidth(5);
Zeilen auswählen
Standardmäßig können Benutzer dies tun auf eine von drei Arten: 1. Wählen Sie eine Tabellenzeile aus:
Um eine einzelne Zeile auszuwählen, klicken Sie auf eine Tabellenzelle in dieser Zeile.
Um mehrere aufeinanderfolgende Zeilen auszuwählen, ziehen Sie die Maus über mehrere Zeilen oder klicken Sie bei gedrückter Umschalttaste auf eine Tabellenzelle.
Um mehrere nicht zusammenhängende Zeilen auszuwählen, halten Sie die Strg-Taste (Befehlstaste auf dem Mac) gedrückt, während Sie auf eine Tabellenzelle klicken.
Verwendung des Tabellenmodells
Wenn Sie eine einfache stringbasierte Tabelle wünschen, die bearbeitet werden kann, kann die Verwendung einiger Arrays als Daten für die Tabelle hilfreich sein . Wenn Sie sich das von uns erstellte Datenarray ansehen, sind die anderen darin enthaltenen Datentypen Strings – die Spalte „Ort“ enthält Ganzzahlen und die Spalte „Weltrekord“ enthält boolesche Werte. Beide Spalten werden jedoch als Zeichenfolgen angezeigt. Um dieses Verhalten zu ändern, erstellen Sie ein Tabellenmodell.
Tabellenmodelle verwalten die in Tabellen anzuzeigenden Daten. Um ein Tabellenmodell zu implementieren, können Sie eine Klasse erstellen, die die AbstractTableModel-Klasse erweitert:
public abstract class AbstractTableModel extends Object implements TableModel, Serializable{ public int getRowCount(); public int getColumnCount(); public Object getValueAt(int row, int column); public String getColumnName(int column; public boolean isCellEditable(int rowIndex, int columnIndex); public Class getColumnClass(int columnIndex); }
Die sechs oben genannten Methoden werden in dieser Schritt-für-Schritt-Anleitung verwendet, aber die AbstractTableModel-Klasse definiert viele weitere Methoden kann zum Bearbeiten von JTables-Daten im Objekt verwendet werden. Wenn Sie eine Klasse erweitern, um AbstractTableModel zu verwenden, müssen Sie nur die Methoden getRowCount, getColumnCount und getValueAt implementieren.
Erstellen Sie eine neue Klasse, die die oben genannten fünf Methoden implementiert:
class ExampleTableModel extends AbstractTableModel{ String[] columnNames = {"First Name", "Surname", "Country" , "Event", "Place", "Time", "World Record" }; Object[][] data = { {"César Cielo", "Filho", "Brazil", "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 }, }; @Override public int getRowCount() { return data.length; } @Override public int getColumnCount() { return columnNames.length; } @Override public Object getValueAt(int row, int column) { return data[row][column]; } @Override public String getColumnName(int column) { return columnNames[column]; }@Override public Class getColumnClass(int c) { return getValueAt(0, c).getClass(); }@Override public boolean isCellEditable(int row, int column) { if (column == 1 || column == 2) { return false; } else { return true; } } }
In diesem Beispiel ist es sinnvoll, dass die Klasse „ExampleTableModel“ die beiden Zeichenfolgen enthält, die die Tabellendaten enthalten. Anschließend können die Methoden getRowCount, getColumnCount, getValueAt und getColumnName das Array verwenden, um die Werte für die Tabelle bereitzustellen. Beachten Sie außerdem, wie die Methode isCellEditable geschrieben ist, um die Bearbeitung der ersten beiden Spalten zu deaktivieren.
Jetzt können wir in JTable die folgende Klasse „ExampleTableModel“ verwenden, anstatt zwei Arrays zum Erstellen des Objekts zu verwenden:
JTable table = new JTable(new ExampleTableModel());
Wenn der Code ausgeführt wird, werden Sie sehen, dass das JTable-Objekt das Tabellenmodell verwendet weil es keine Tabelle gibt. Die Zellen können bearbeitet werden und die Spaltennamen werden korrekt verwendet. Wenn die Methode getColumnName nicht implementiert wurde, werden die Spaltennamen in der Tabelle als Standardnamen A, B, C, D usw. angezeigt.
我们现在考虑一下该方法 getColumnClass。仅这一点使得表模型值得实现,因为它为JTable对象提供了每列中包含的数据类型。如果您还记得,对象数据数组有两列不是String数据类型:Place包含int的World Record列和包含的列booleans。了解这些数据类型会更改JTable对象为这些列提供的功能。运行带有表模型的示例表代码意味着该World Record列实际上将是一系列复选框。
添加ComboBox编辑器
您可以为表中的单元格定义自定义编辑器。例如,您可以使组合框替换字段的标准文本编辑。
以下是使用JComboBoxcountry字段的示例 :
String[] countries = {"Australia", "Brazil", "Canada", "China" ,"France", "Japan", "Norway", "Russia", "South Korea" , "Tunisia", "USA"}; JComboBox countryCombo = new JComboBox(countries);
要设置country列的默认编辑器,请使用TableColumn该类获取对country列的引用,并使用该setCellEditor方法将该列设置JComboBox为单元格编辑器:
TableColumn countryColumn = table.getColumnModel().getColumn(2); countryColumn.setCellEditor(new DefaultCellEditor(countryCombo));
Das obige ist der detaillierte Inhalt vonSo erstellen Sie eine Java-Tabelle mit JTable. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!