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;