Mittwoch, 25. März 2009

 

JTable

Erstellen Sie ein einfaches Java-Programm, welches einfache CSV-Dateien erzeugen, darstellen und ändern kann. Verwenden Sie zur Darstellung der CSV-Datei eine JTable. Beim Neuanlegen wir die Anzahl der Spalten festgelegt. Beim Laden einer CSV-Datei wird die Anzahl der Zeilen/Spalten durch die Datei gegeben.
Das Programm soll es ermöglichen, jede Zelle (definiert durch Zeile und Spalte) zu ändern.
Sehen Sie eine Möglichkeit zum Einfügen neuer Zeilen vor.
Eine markierte Zeile soll gelöscht werden können.

Nennen Sie das Projekt klasse-tabelle-name (klasse ist Ihre Klasse, name ist Ihr Familienname, z.B. 3bd-tabelle-mueller)

Hier finden Sie zwei Beispielklassen, TableFrame für das GUI und MyTableModel für das Tabellenmodell.


/**
* JTableDemo/at.haberstroh.table/TableFrame.java
*
* Einfaches Tabellenbeispiel mit eigenem Modell. Einfügen/Löschen von Zeilen,
* Ändern von Zeilen.
*
* (c) 2007 Harald R. Haberstroh, www.haberstroh.at
*
* 15.01.2007
*/

package at.haberstroh.table;

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.ListSelectionModel;

/**
* @author hp
*
*/
public class TableFrame extends JFrame {

private static final long serialVersionUID = 9118987994549780691L;
private JTable table;
private MyTableModel model;

public TableFrame() {
setLayout(new BorderLayout());
table = new JTable();
model = new MyTableModel();
table.setModel(model);
table.setPreferredScrollableViewportSize(new Dimension(550, 100));
table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
add(new JScrollPane(table), BorderLayout.CENTER);
JButton eBut = new JButton("Einfügen");
JButton lBut = new JButton("Löschen");
JButton aBut = new JButton("Anzeigen");
JPanel pan = new JPanel();
pan.add(eBut);
pan.add(aBut);
pan.add(lBut);
eBut.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
int zeile = table.getSelectedRow();
if (zeile > -1)
model.insertRow(zeile);
}
});
aBut.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
System.out.print(model);
}
});
lBut.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
int zeile = table.getSelectedRow();
if (zeile > -1)
model.deleteRow(zeile);
}
});
add(pan, BorderLayout.SOUTH);
setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
pack(); // GUI so klein als möglich machen
}

/**
* @param args
*/
public static void main(String[] args) {
new TableFrame().setVisible(true);
}

}



/**
* JTableDemo/at.haberstroh.table/MyTableModel.java
*
* Implementiert ein einfaches Modell einer 3-spaltigen Tabelle.
*
* (c) 2007 Harald R. Haberstroh, www.haberstroh.at
*
* 15.01.2007
*/
package at.haberstroh.table;

import javax.swing.table.AbstractTableModel;

/**
* @author hp
*
*/
public class MyTableModel extends AbstractTableModel {

private static final long serialVersionUID = -8833545818864673421L;

// Kopf
private Object[] name = { "Name", "Erfindung", "geboren" };

// (Anfangs-)Daten
private Object[][] daten = {
{ "C. Babbage", "The Analytical Engine", new Integer(1792) },
{ "N. Chomsky", "Die Chomsky-Grammatiken", new Integer(1928) },
{ "G.W. Leibniz", "Das Dualsystem", new Integer(1646) },
{ "A.M. Turing", "Die Turing-Maschine", new Integer(1912) },
{ "K. Zuse", "Der 1. Relaisrechner Z1", new Integer(1910) } };

/**
* @return Beschriftung
*/
public String getColumnName(int col) {
return (String) name[col];
}

/**
* @return liefert Klasse der Spalte
*/
public Class getColClass(int col) {
if (col == 0 || col == 1)
return String.class;
else
return Integer.class;
}

/**
* @return liefert Anzahl der Spalten
*/
public int getColumnCount() {
return 3;
}

/**
* @return liefert Anzahl der Zeilen
*/
public int getRowCount() {
return daten.length;
}

/**
* @param arg0 Zeile
* @param arg1 Spalte
* @return liefert Wert der Zelle
*/
public Object getValueAt(int arg0, int arg1) {
return daten[arg0][arg1];
}

/**
* @param aValue Wert der gesetzt werden soll
* @param arg0 Zeile
* @param arg1 Spalte
*/
public void setValueAt(Object aValue, int row, int col) {
daten[row][col] = aValue;
fireTableCellUpdated(row, col);
}

/**
* @return ist die Zelle änderbar?
*/
public boolean isCellEditable(int row, int col) {
return row < daten.length && col < 3;
}

/**
* Einfügen einer Zeile
* @param row die Zeilennummer vor der eingefügt wird
*/
public void insertRow(int row) {
Object[][] tmp = new Object[daten.length + 1][3];
for (int i = 0; i < row; i++) {
for (int j = 0; j < 3; j++) {
tmp[i][j] = daten[i][j];
}
}
// neue Zeile
tmp[row][0] = "";
tmp[row][1] = "";
tmp[row][2] = new Integer(0);
// Rest
for (int i = row + 1; i < tmp.length; i++) {
for (int j = 0; j < 3; j++) {
tmp[i][j] = daten[i - 1][j];
}
}
// neue daten
daten = tmp;

// update
fireTableDataChanged();
}

/**
* löschen der Zeile. Bei der letzten Zeile wird eine leere
* Zeile angelegt.
* @param row Zeilennummer
*/
public void deleteRow(int row) {
if (row >= 0 && row < daten.length && daten.length > 1) {
Object[][] tmp = new Object[daten.length - 1][3];
for (int i = 0; i < row; i++) {
for (int j = 0; j < 3; j++) {
tmp[i][j] = daten[i][j];
}
}
for (int i = row; i < tmp.length; i++) {
for (int j = 0; j < 3; j++) {
tmp[i][j] = daten[i+1][j];
}
}
// neue daten
daten = tmp;

} else { // leere Zeile
daten = new Object[][] { { "", "", new Integer(0) } };
}

// update
fireTableDataChanged();
}

/**
* @return liefert Tabelle als String
*/
public String toString() {
StringBuffer buf = new StringBuffer(1000);
for (int i = 0; i < daten.length; i++) {
for (int j = 0; j < 3; j++) {
buf.append(daten[i][j]);
}
buf.append("\n");
}
return buf.toString();
}

}

Labels: , , ,


Kommentare:

Kommentar veröffentlichen

Abonnieren Kommentare zum Post [Atom]





<< Startseite

This page is powered by Blogger. Isn't yours?

Abonnieren Posts [Atom]