| PanelMatriisi.java |
1 package demo9;
2
3 import javax.swing.JPanel;
4 import java.awt.BorderLayout;
5 import javax.swing.JTextArea;
6 import javax.swing.JSpinner;
7 import javax.swing.SpinnerNumberModel;
8 import javax.swing.border.BevelBorder;
9
10 import fi.jyu.mit.ohj2.Mjonot;
11 import java.awt.Font;
12
13
14 /**
15 * Paneeli, jossa on konvoluutiomatriisi, jota voi muokata
16 * @author vesal
17 * @version 6.11.2010
18 */
19 public class PanelMatriisi extends JPanel {
20 private static final long serialVersionUID = 1L;
21
22 private final JPanel panelValinnat = new JPanel();
23 private final JTextArea textMatriisi = new JTextArea();
24 private final JSpinner spinner = new JSpinner();
25
26 /**
27 * Create the panel.
28 */
29 public PanelMatriisi() {
30 setBorder(new BevelBorder(BevelBorder.LOWERED, null, null, null, null));
31 setLayout(new BorderLayout(0, 0));
32 textMatriisi.setFont(new Font("Monospaced", textMatriisi.getFont().getStyle(), 13));
33 textMatriisi.setRows(3);
34 textMatriisi.setText("-1 0 1\r\n-1 0 1\r\n-1 0 1");
35
36 add(textMatriisi, BorderLayout.CENTER);
37
38 add(panelValinnat, BorderLayout.SOUTH);
39 spinner.setModel(new SpinnerNumberModel(0, 0, 50, 1));
40
41 panelValinnat.add(spinner);
42
43 }
44
45
46 /**
47 * Palautetaan merkkijonotaulukosta saatava kokonaislukumatriisi.
48 * @param lines josta matriisi otetaan. 1. rivin pituus määrää sarakkeiden määrän
49 * @return taulukosta saatu matriisi.
50 * @example
51 * <pre name="test">
52 * int[][] m = getMatriisi(new String[]{"1 -2 3 4","5","6 7 8 9 10 11"});
53 * m.length === 3; m[0].length === 4; m[2].length === 4;
54 * m[0][0] === 1; m[0][1] === -2; m[0][2] === 3; m[0][3] === 4;
55 * m[1][0] === 5; m[1][1] === 0; m[1][2] === 0; m[1][3] === 0;
56 * m[2][0] === 6; m[2][1] === 7; m[2][2] === 8; m[2][3] === 9;
57 *
58 * int[][] m2 = getMatriisi(new String[0]);
59 * m2.length === 1; m2[0].length === 1;
60 * m2[0][0] === 1;
61 * </pre>
62 *
63 */
64 public static int[][] getMatriisi(String[] lines) {
65 int n = 0; // Selvitetään rivien määrä
66 final String erottimet = "[ \t,;:]+";
67 for (String line : lines) {
68 if ( line.trim().length() == 0 ) break;
69 n++;
70 }
71 if ( n == 0 ) return new int[][]{{1}};
72
73 String line = lines[0];
74 String[] items = line.split(erottimet);
75 int m = items.length;
76
77 int[][] tulos = new int[n][m];
78
79 for (int iy=0; iy<n; iy++) {
80 String[] cols = lines[iy].split(erottimet);
81 for (int ix = 0; ix < m; ix++) {
82 if ( ix >= cols.length) break;
83 tulos[iy][ix] = Mjonot.erotaInt(cols[ix], 0);
84 }
85 }
86
87 return tulos;
88 }
89
90
91 /**
92 * Palautetaan jonosta saatava kokonaislukumatriisi.
93 * Rivit erotetaan \n merkillä.
94 * @param jono josta matriisi otetaan. 1. rivin pituus määrää sarakkeiden määrän
95 * @return jonosta saatu matriisi.
96 * @example
97 * <pre name="test">
98 * int[][] m = getMatriisi("1,-2\n3 4\na\t6\n\n");
99 * m.length === 3;
100 * m[0][0] === 1; m[0][1] === -2;
101 * m[1][0] === 3; m[1][1] === 4;
102 * m[2][0] === 0; m[2][1] === 6;
103 * int[][] m2 = getMatriisi("\n\n");
104 *
105 * m2.length === 1; m2[0].length === 1;
106 * m2[0][0] === 1;
107 * </pre>
108 */
109 public static int[][] getMatriisi(String jono) {
110 return getMatriisi(jono.split("\n"));
111 }
112
113
114 /**
115 * Palauatetaan paneelissa oleva konvoluutiomatriisi
116 * @return konvoluttiomatriisi
117 */
118 public int[][] getMatriisi() {
119 return getMatriisi(textMatriisi.getText());
120 }
121
122
123 /**
124 * @return matriisille valittu toistokertojen määrä
125 */
126 public int getValue() {
127 return (Integer)spinner.getValue();
128 }
129
130
131 /**
132 * Asetetaan konvoluutiomatriisin toistokertojen määrä
133 * @param n monestiko konvoluutiota toistetaan
134 */
135 public void setValue(int n) {
136 spinner.setValue(n);
137
138 }
139
140
141 /**
142 * Asetetaan konvoluutiomatriisin sisältö yhdestä merkkijonosta jossa rivit erotettu \n-merkeillä.
143 * @param jono uusi matriisin arvo
144 */
145 public void setText(String jono) {
146 textMatriisi.setText(jono);
147 }
148
149 }
150