
Prezentacja macierzy jako JTable
Aby móc wyświetlić macierz jako JTable musimy przygotować:
- Klasę
MatrixReenderer - Klasę
MatrixTableModel - metodę
showAsJTable()w klasieMatrix - Klasę uruchamiającą
Matrix007
Klasa MatrixReenderer
package matrices;
import javax.swing.*;
import javax.swing.table.TableCellRenderer;
import java.awt.*;
import java.text.DecimalFormat;
public class MatrixReenderer extends JLabel implements
TableCellRenderer {
private static final long serialVersionUID =
18737557295563L;
public MatrixReenderer() {
}
@Override
public Component getTableCellRendererComponent(JTable table,
Object value, boolean isSelected, boolean hasFocus,
int row, int column) {
DecimalFormat form = new DecimalFormat("##0.00");
String str = null;
if (value instanceof String) {
str = (String) value;
}
if (value instanceof Double) {
Double d = (Double) value;
str = form.format(d);
}
if (str.startsWith("-")) {
setForeground(Color.RED);
} else {
setForeground(Color.BLACK);
}
this.setHorizontalAlignment(JLabel.RIGHT);
setText(str);
return this;
}
}
Klasa MatrixTableModel
package matrices;
import javax.swing.table.AbstractTableModel;
import java.text.DecimalFormat;
public class MatrixTableModel extends AbstractTableModel {
private static final long serialVersionUID =
-443758665172380994L;
private final Object[][] array;
public MatrixTableModel(double[][] tabl) {
array = new Object[tabl.length][tabl[0].length];
for (int i = 0; i < tabl.length; i++) {
for (int j = 0; j < tabl[0].length; j++) {
array[i][j] = tabl[i][j];
}
}
}
@Override
public int getRowCount() {
return array.length;
}
@Override
public boolean isCellEditable(int row, int column) {
return true;
}
@Override
public int getColumnCount() {
return array[0].length;
}
@Override
public Object getValueAt(int row, int col) {
return array[row][col];
}
@Override
public void setValueAt(Object value, int r, int c) {
DecimalFormat form = new DecimalFormat("##0.00");
Double val = Double.valueOf((String) value);
array[r][c] = form.format(val);
this.fireTableCellUpdated(r, c);
}
}
Metoda showAsJTable() w klasie Matrix
public void showAsJTable() {
JFrame frame = new JFrame();
JTable table = new JTable();
JScrollPane sp = new JScrollPane(table);
MatrixTableModel mtm = new MatrixTableModel(array);
table.setDefaultRenderer(Object.class, new
MatrixReenderer());
table.setModel(mtm);
frame.add(sp);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setTitle("Matrix");
frame.pack();
frame.setVisible(true);
}
Klasa uruchamiającą Matrix007
Tworzymy macierz. Wyświetlamy macierz jako JTable. Nie ustawialiśmy wielkości ramki. Wartości ujemne wyświetlane są na czerwono.
double[][] tabl = {{1, -2, 3}, {4, -5, 6},
{7, -8, 9}};
Matrix matrix = new Matrix(tabl);
matrix.showAsJTable();
Po uruchomieniu klasy zobaczymy:

Pliki do ściągnięcia
Moduł matrices – aktualny stan projektu = 026;
