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
* 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); } }