Diskussion:JTable (Tutorial)©: Unterschied zwischen den Versionen
Crian (Diskussion | Beiträge) (Die Seite wurde neu angelegt: „Das Beispiel 2 mit Vector scheint mir nicht mehr so wirklich zeitgemäß. Zumindest ist beim Kopieren nach Eclipse erstmal "alles" gelb. Vorschlag: <code=java>im…“) |
Crian (Diskussion | Beiträge) |
||
(Eine dazwischenliegende Version desselben Benutzers wird nicht angezeigt) | |||
Zeile 57: | Zeile 57: | ||
frame.setVisible(true); | frame.setVisible(true); | ||
} | } | ||
− | }</code> | + | }</code=java> |
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.