package demo9; import javax.swing.JPanel; import java.awt.BorderLayout; import javax.swing.JTextArea; import javax.swing.JSpinner; import javax.swing.SpinnerNumberModel; import javax.swing.border.BevelBorder; import fi.jyu.mit.ohj2.Mjonot; import java.awt.Font; /** * Paneeli, jossa on konvoluutiomatriisi, jota voi muokata * @author vesal * @version 6.11.2010 */ public class PanelMatriisi extends JPanel { private static final long serialVersionUID = 1L; private final JPanel panelValinnat = new JPanel(); private final JTextArea textMatriisi = new JTextArea(); private final JSpinner spinner = new JSpinner(); /** * Create the panel. */ public PanelMatriisi() { setBorder(new BevelBorder(BevelBorder.LOWERED, null, null, null, null)); setLayout(new BorderLayout(0, 0)); textMatriisi.setFont(new Font("Monospaced", textMatriisi.getFont().getStyle(), 13)); textMatriisi.setRows(3); textMatriisi.setText("-1 0 1\r\n-1 0 1\r\n-1 0 1"); add(textMatriisi, BorderLayout.CENTER); add(panelValinnat, BorderLayout.SOUTH); spinner.setModel(new SpinnerNumberModel(0, 0, 50, 1)); panelValinnat.add(spinner); } /** * Palautetaan merkkijonotaulukosta saatava kokonaislukumatriisi. * @param lines josta matriisi otetaan. 1. rivin pituus määrää sarakkeiden määrän * @return taulukosta saatu matriisi. * @example *
     *   int[][] m = getMatriisi(new String[]{"1 -2 3 4","5","6 7 8 9 10 11"});
     *   m.length === 3; m[0].length === 4; m[2].length === 4;
     *   m[0][0] === 1; m[0][1] === -2; m[0][2] === 3; m[0][3] === 4;
     *   m[1][0] === 5; m[1][1] ===  0; m[1][2] === 0; m[1][3] === 0;
     *   m[2][0] === 6; m[2][1] ===  7; m[2][2] === 8; m[2][3] === 9;
     *   
     *   int[][] m2 = getMatriisi(new String[0]);
     *   m2.length === 1; m2[0].length === 1;
     *   m2[0][0] === 1;
     * 
* */ public static int[][] getMatriisi(String[] lines) { int n = 0; // Selvitetään rivien määrä final String erottimet = "[ \t,;:]+"; for (String line : lines) { if ( line.trim().length() == 0 ) break; n++; } if ( n == 0 ) return new int[][]{{1}}; String line = lines[0]; String[] items = line.split(erottimet); int m = items.length; int[][] tulos = new int[n][m]; for (int iy=0; iy= cols.length) break; tulos[iy][ix] = Mjonot.erotaInt(cols[ix], 0); } } return tulos; } /** * Palautetaan jonosta saatava kokonaislukumatriisi. * Rivit erotetaan \n merkillä. * @param jono josta matriisi otetaan. 1. rivin pituus määrää sarakkeiden määrän * @return jonosta saatu matriisi. * @example *
     *   int[][] m = getMatriisi("1,-2\n3  4\na\t6\n\n");
     *   m.length === 3;
     *   m[0][0] === 1; m[0][1] === -2;
     *   m[1][0] === 3; m[1][1] === 4;
     *   m[2][0] === 0; m[2][1] === 6;
     *   int[][] m2 = getMatriisi("\n\n");
     *   
     *   m2.length === 1; m2[0].length === 1;
     *   m2[0][0] === 1;
     * 
*/ public static int[][] getMatriisi(String jono) { return getMatriisi(jono.split("\n")); } /** * Palauatetaan paneelissa oleva konvoluutiomatriisi * @return konvoluttiomatriisi */ public int[][] getMatriisi() { return getMatriisi(textMatriisi.getText()); } /** * @return matriisille valittu toistokertojen määrä */ public int getValue() { return (Integer)spinner.getValue(); } /** * Asetetaan konvoluutiomatriisin toistokertojen määrä * @param n monestiko konvoluutiota toistetaan */ public void setValue(int n) { spinner.setValue(n); } /** * Asetetaan konvoluutiomatriisin sisältö yhdestä merkkijonosta jossa rivit erotettu \n-merkeillä. * @param jono uusi matriisin arvo */ public void setText(String jono) { textMatriisi.setText(jono); } }