Diskussion:JTable (Tutorial)©: Unterschied zwischen den Versionen
Crian (Diskussion | Beiträge) Keine Bearbeitungszusammenfassung |
Crian (Diskussion | Beiträge) Keine Bearbeitungszusammenfassung |
||
| Zeile 60: | Zeile 60: | ||
Crian | Crian | ||
Auch die Vektoren im dritten Beispiel könnte man verbessern: | |||
<code=java>import java.awt.BorderLayout; | |||
import java.awt.Container; | |||
import java.awt.event.ActionEvent; | |||
import java.awt.event.ActionListener; | |||
import java.util.Random; | |||
import java.util.Vector; | |||
import javax.swing.JButton; | |||
import javax.swing.JFrame; | |||
import javax.swing.JScrollPane; | |||
import javax.swing.JTable; | |||
import javax.swing.table.DefaultTableModel; | |||
public class JTabelDemoDefaultTableModell { | |||
public static void main(String[] args) { | |||
new JTabelDemoDefaultTableModell(); | |||
} | |||
public JTabelDemoDefaultTableModell() { | |||
/* Die Titel für die Tabelle bereitstellen: */ | |||
String[] titles = new String[] { "A", "B", "C", "D" }; | |||
/* | |||
* Das Model das wir verwenden werden. Hier setzten wir gleich die | |||
* Titel, aber es ist später immer noch möglich weitere Columns oder | |||
* Rows hinzuzufügen: | |||
*/ | |||
final DefaultTableModel model = new DefaultTableModel(titles, 0); | |||
/* Die Tabelle initialisieren: */ | |||
JTable table = new JTable(model); | |||
/* Buttons zum Bearbeiten der Tabelle: */ | |||
final JButton addRowButton = new JButton("add row"); | |||
final JButton removeRowButton = new JButton("remove row"); | |||
final JButton addColumnButton = new JButton("add column"); | |||
removeRowButton.setEnabled(false); | |||
/* Funktionalität für das Hinzufügen einer Zeile hinterlegen: */ | |||
addRowButton.addActionListener(new ActionListener() { | |||
@Override | |||
public void actionPerformed(ActionEvent e) { | |||
/* Die Anzahl der Spalten der Tabelle (Breite): */ | |||
int size = model.getColumnCount(); | |||
/* | |||
* Einen neuen Vector mit der passenden Anzahl an Daten | |||
* herstellen: | |||
*/ | |||
Vector<String> newDatas = createDataVector("row", size); | |||
/* Eine neue Zeile hinzufügen: */ | |||
model.addRow(newDatas); | |||
/* Das Entfernen der Zeile erlauben: */ | |||
removeRowButton.setEnabled(true); | |||
} | |||
}); | |||
/* Funktionalität für das Hinzufügen einer Spalte hinterlegen: */ | |||
addColumnButton.addActionListener(new ActionListener() { | |||
@Override | |||
public void actionPerformed(ActionEvent e) { | |||
/* Die Anzahl der Zeilen der Tabelle (Höhe): */ | |||
int size = model.getRowCount(); | |||
/* | |||
* Einen neuen Vector mit der passenden Anzahl an Daten | |||
* herstellen: | |||
*/ | |||
Vector<String> newDatas = createDataVector("column", size); | |||
/* | |||
* Name der Spalte ermitteln (da wir in den Titeln keine | |||
* weiteren Spaltennamen hinterlegt haben, wird die Nummer der | |||
* Spalte (beginnend bei 0) als Spaltentitel angezeigt: | |||
*/ | |||
String name = String.valueOf(model.getColumnCount()); | |||
/* Eine neue Spalte hinzufügen: */ | |||
model.addColumn(name, newDatas); | |||
} | |||
}); | |||
/* Funktionalität für das Löschen einer Zeile hinterlegen: */ | |||
final Random random = new Random(); | |||
removeRowButton.addActionListener(new ActionListener() { | |||
@Override | |||
public void actionPerformed(ActionEvent e) { | |||
/* Die Anzahl der Spalten der Tabelle (Breite): */ | |||
int size = model.getRowCount(); | |||
/* Eine zufällige Zeile zum Löschen auswählen: */ | |||
int index = random.nextInt(size); | |||
model.removeRow(index); | |||
/* Falls keine Zeilen mehr da sind, den Button deaktivieren: */ | |||
removeRowButton.setEnabled(size > 1); | |||
} | |||
}); | |||
/* Die Tabelle anzeigen: */ | |||
showGui(table, addRowButton, removeRowButton, addColumnButton); | |||
} | |||
/** | |||
* Erzeugt einen Vector mit der passenden Anzahl an Strings. | |||
* | |||
* @param prefix | |||
* Text, der am Anfang jedes erzeugten Strings angezeigt wird. | |||
* @param size | |||
* Anzahl der zu erzeugenden Strings in dem Vector. | |||
* @return Vector mit der passenden Anzahl an Strings. | |||
*/ | |||
public Vector<String> createDataVector(String prefix, int size) { | |||
Vector<String> vector = new Vector<String>(size); | |||
for (int i = 0; i < size; i++) { | |||
vector.add(prefix + " : " + size + " : " + i); | |||
} | |||
return vector; | |||
} | |||
/** | |||
* Zeigt die Oberfläche an. | |||
* | |||
* @param table | |||
* Darzustellende Tabelle | |||
* @param addRowButton | |||
* Schalter, um eine Zeile hinzuzufügen. | |||
* @param removeRowButton | |||
* Schalter, um eine Zeile zu entfernen. | |||
* @param addColumnButton | |||
* Schalter, um eine Spalte hinzuzufügen. | |||
*/ | |||
private void showGui(JTable table, JButton addRowButton, | |||
JButton removeRowButton, JButton addColumnButton) { | |||
JFrame frame = new JFrame("Demo"); | |||
Container content = frame.getContentPane(); | |||
content.add(new JScrollPane(table), BorderLayout.CENTER); | |||
content.add(addRowButton, BorderLayout.NORTH); | |||
content.add(removeRowButton, BorderLayout.SOUTH); | |||
content.add(addColumnButton, BorderLayout.WEST); | |||
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); | |||
frame.pack(); | |||
frame.setVisible(true); | |||
} | |||
}</code=java> | |||
Man könnte da natürlich noch mehr in Methoden auslagern, aber das würde vielleicht Anfänger eher irritieren. | |||
Aktuelle Version vom 6. September 2013, 08:11 Uhr
Das Beispiel 2 mit Vector scheint mir nicht mehr so wirklich zeitgemäß. Zumindest ist beim Kopieren nach Eclipse erstmal "alles" gelb. Vorschlag:
<code=java>import java.util.Vector;
import javax.swing.JFrame; import javax.swing.JScrollPane; import javax.swing.JTable;
public class JTableDemoVectoren {
public static void main(String[] args) {
/* Die Titel für die Tabelle bereitstellen: */
Vector<String> title = new Vector<>();
title.add("A");
title.add("B");
title.add("C");
title.add("D");
/* Die Daten für die Tabelle bereitstellen: */
Vector<Vector<String>> data = new Vector<>();
{
Vector<String> rowA = new Vector<>();
rowA.add("1");
rowA.add("2");
rowA.add("3");
rowA.add("4");
data.add(rowA);
}
{
Vector<String> rowB = new Vector<>();
rowB.add("5");
rowB.add("6");
rowB.add("7");
rowB.add("8");
data.add(rowB);
}
{
Vector<String> rowC = new Vector<>();
rowC.add("9");
rowC.add("10");
rowC.add("11");
rowC.add("12");
data.add(rowC);
}
/* Die Tabelle initialisieren: */
JTable table = new JTable(data, title);
/* Die Tabelle anzeigen: */
JFrame frame = new JFrame("Demo");
frame.getContentPane().add(new JScrollPane(table));
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setVisible(true);
}
}</code=java>
Crian
Auch die Vektoren im dritten Beispiel könnte man verbessern:
<code=java>import java.awt.BorderLayout; import java.awt.Container; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.Random; import java.util.Vector;
import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JScrollPane; import javax.swing.JTable; import javax.swing.table.DefaultTableModel;
public class JTabelDemoDefaultTableModell {
public static void main(String[] args) {
new JTabelDemoDefaultTableModell();
}
public JTabelDemoDefaultTableModell() {
/* Die Titel für die Tabelle bereitstellen: */
String[] titles = new String[] { "A", "B", "C", "D" };
/*
* Das Model das wir verwenden werden. Hier setzten wir gleich die
* Titel, aber es ist später immer noch möglich weitere Columns oder
* Rows hinzuzufügen:
*/
final DefaultTableModel model = new DefaultTableModel(titles, 0);
/* Die Tabelle initialisieren: */
JTable table = new JTable(model);
/* Buttons zum Bearbeiten der Tabelle: */
final JButton addRowButton = new JButton("add row");
final JButton removeRowButton = new JButton("remove row");
final JButton addColumnButton = new JButton("add column");
removeRowButton.setEnabled(false);
/* Funktionalität für das Hinzufügen einer Zeile hinterlegen: */
addRowButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
/* Die Anzahl der Spalten der Tabelle (Breite): */
int size = model.getColumnCount();
/*
* Einen neuen Vector mit der passenden Anzahl an Daten
* herstellen:
*/
Vector<String> newDatas = createDataVector("row", size);
/* Eine neue Zeile hinzufügen: */
model.addRow(newDatas);
/* Das Entfernen der Zeile erlauben: */
removeRowButton.setEnabled(true);
}
});
/* Funktionalität für das Hinzufügen einer Spalte hinterlegen: */
addColumnButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
/* Die Anzahl der Zeilen der Tabelle (Höhe): */
int size = model.getRowCount();
/*
* Einen neuen Vector mit der passenden Anzahl an Daten
* herstellen:
*/
Vector<String> newDatas = createDataVector("column", size);
/*
* Name der Spalte ermitteln (da wir in den Titeln keine
* weiteren Spaltennamen hinterlegt haben, wird die Nummer der
* Spalte (beginnend bei 0) als Spaltentitel angezeigt:
*/
String name = String.valueOf(model.getColumnCount());
/* Eine neue Spalte hinzufügen: */
model.addColumn(name, newDatas);
}
});
/* Funktionalität für das Löschen einer Zeile hinterlegen: */
final Random random = new Random();
removeRowButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
/* Die Anzahl der Spalten der Tabelle (Breite): */
int size = model.getRowCount();
/* Eine zufällige Zeile zum Löschen auswählen: */
int index = random.nextInt(size);
model.removeRow(index);
/* Falls keine Zeilen mehr da sind, den Button deaktivieren: */
removeRowButton.setEnabled(size > 1);
}
});
/* Die Tabelle anzeigen: */
showGui(table, addRowButton, removeRowButton, addColumnButton);
}
/**
* Erzeugt einen Vector mit der passenden Anzahl an Strings.
*
* @param prefix
* Text, der am Anfang jedes erzeugten Strings angezeigt wird.
* @param size
* Anzahl der zu erzeugenden Strings in dem Vector.
* @return Vector mit der passenden Anzahl an Strings.
*/
public Vector<String> createDataVector(String prefix, int size) {
Vector<String> vector = new Vector<String>(size);
for (int i = 0; i < size; i++) {
vector.add(prefix + " : " + size + " : " + i);
}
return vector; }
/**
* Zeigt die Oberfläche an.
*
* @param table
* Darzustellende Tabelle
* @param addRowButton
* Schalter, um eine Zeile hinzuzufügen.
* @param removeRowButton
* Schalter, um eine Zeile zu entfernen.
* @param addColumnButton
* Schalter, um eine Spalte hinzuzufügen.
*/
private void showGui(JTable table, JButton addRowButton,
JButton removeRowButton, JButton addColumnButton) {
JFrame frame = new JFrame("Demo");
Container content = frame.getContentPane();
content.add(new JScrollPane(table), BorderLayout.CENTER);
content.add(addRowButton, BorderLayout.NORTH);
content.add(removeRowButton, BorderLayout.SOUTH);
content.add(addColumnButton, BorderLayout.WEST);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setVisible(true);
}
}</code=java>
Man könnte da natürlich noch mehr in Methoden auslagern, aber das würde vielleicht Anfänger eher irritieren.
