1 package demo9;
2
3 import javax.swing.JPanel;
4
5 import fi.jyu.mit.graphics.Bitmap;
6 import fi.jyu.mit.graphics.SpacePanel;
7 import java.awt.BorderLayout;
8 import javax.swing.BoxLayout;
9 import javax.swing.JButton;
10 import java.awt.event.ActionListener;
11 import java.awt.event.ActionEvent;
12 import static demo9.Pystyviivat.*;
13
14 import javax.swing.ButtonGroup;
15 import javax.swing.JTextField;
16 import javax.swing.JRadioButton;
17 import javax.swing.SwingConstants;
18 import javax.swing.JCheckBox;
19 import javax.swing.border.BevelBorder;
20 import javax.swing.JLabel;
21 import java.awt.Color;
22
23
29 public class KonvoluutioPanel extends JPanel {
30
31 private static final long serialVersionUID = 1L;
32
33 private SpacePanel spacePanelAlkup = new SpacePanel();
34 private SpacePanel spacePanelMuunnettu = new SpacePanel();
35 private JTextField editURL1;
36 private JTextField editURL2;
37 private JRadioButton rbURL1 = new JRadioButton("1");
38 private JRadioButton rbURL2 = new JRadioButton("2");
39 private PanelMatriisi[] panelMatriisi = new PanelMatriisi[5];
40 private PanelSumma panelSumma1 = new PanelSumma();
41 private PanelSumma panelSumma2 = new PanelSumma();
42 private JLabel labelError = new JLabel("");
43
44
45
48 public KonvoluutioPanel() {
49 setLayout(new BorderLayout(0, 0));
50
51 JPanel panelKuvat = new JPanel();
52 add(panelKuvat, BorderLayout.CENTER);
53 panelKuvat.setLayout(new BoxLayout(panelKuvat, BoxLayout.X_AXIS));
54
55 panelKuvat.add(spacePanelAlkup);
56
57 panelKuvat.add(spacePanelMuunnettu);
58
59 JPanel panelMuut = new JPanel();
60 add(panelMuut, BorderLayout.SOUTH);
61
62 JButton buttonTee = new JButton("Aja muunnokset");
63 buttonTee.setToolTipText("Suorita valitut muunnokset");
64 buttonTee.setMnemonic('A');
65 buttonTee.addActionListener(new ActionListener() {
66 public void actionPerformed(ActionEvent e) {
67 vaihdaKuva();
68 }
69 });
70 panelMuut.setLayout(new BorderLayout(0, 0));
71 panelMuut.add(buttonTee, BorderLayout.SOUTH);
72
73 JPanel panelMatriisit = new JPanel();
74 panelMuut.add(panelMatriisit, BorderLayout.NORTH);
75 panelMatriisit.setLayout(new BoxLayout(panelMatriisit, BoxLayout.X_AXIS));
76
77 JPanel panelSummat = new JPanel();
78 panelSummat.setBorder(new BevelBorder(BevelBorder.LOWERED, null, null, null, null));
79 panelMuut.add(panelSummat, BorderLayout.CENTER);
80
81 JLabel lblLaskeSummat = new JLabel("Laske summat: ");
82 panelSummat.add(lblLaskeSummat);
83 panelSumma1.setToolTipText("Kertoimet 1. yhteenlaskua varten");
84
85 panelSummat.add(panelSumma1);
86 panelSumma2.setToolTipText("Kertoimet 2. yhteenlaskua varten");
87 panelSummat.add(panelSumma2);
88
89 for ( int i=0; i<panelMatriisi.length; i++) {
90 panelMatriisi[i] = new PanelMatriisi();
91 panelMatriisit.add(panelMatriisi[i]);
92 }
93
94 JPanel panelURLS = new JPanel();
95 add(panelURLS, BorderLayout.NORTH);
96 panelURLS.setLayout(new BorderLayout(0, 0));
97
98 JPanel panelURL1 = new JPanel();
99 panelURLS.add(panelURL1, BorderLayout.NORTH);
100 panelURL1.setLayout(new BorderLayout(0, 0));
101
102 editURL1 = new JTextField();
103 panelURL1.add(editURL1);
104 editURL1.setToolTipText("Kuvan osoite");
105 editURL1.setText("http://users.jyu.fi/~vesal/kurssit/ohjelmointi1/2010/demot/vast/demo9/vesa.jpg");
106 editURL1.setColumns(10);
107
108 rbURL1.setSelected(true);
109 rbURL1.setHorizontalAlignment(SwingConstants.TRAILING);
110 panelURL1.add(rbURL1, BorderLayout.WEST);
111
112 JPanel panelURL2 = new JPanel();
113 panelURLS.add(panelURL2, BorderLayout.CENTER);
114 panelURL2.setLayout(new BorderLayout(0, 0));
115
116 editURL2 = new JTextField();
117 editURL2.setToolTipText("Kuvan osoite");
118 editURL2.setText("http://users.jyu.fi/~vesal/kurssit/ohjelmointi1/2010/demot/vast/demo9/viivat.png");
119 editURL2.setColumns(10);
120 panelURL2.add(editURL2);
121
122 rbURL2.setHorizontalAlignment(SwingConstants.TRAILING);
123 panelURL2.add(rbURL2, BorderLayout.WEST);
124
125 ButtonGroup bgURLs = new ButtonGroup();
126 bgURLs.add(rbURL1);
127 bgURLs.add(rbURL2);
128
129 JPanel panel = new JPanel();
130 panelURLS.add(panel, BorderLayout.SOUTH);
131 labelError.setForeground(Color.RED);
132
133 panel.add(labelError);
134 alusta();
135 }
136
137
138 private void alusta() {
139 panelMatriisi[1].setText("-1 -1 -1 -1 -1 \n-1 -1 -1 -1 -1 \n-1 -1 24 -1 -1 \n-1 -1 -1 -1 -1 \n-1 -1 -1 -1 -1"); panelMatriisi[2].setText("-1 0 1\n-2 0 2\n-1 0 1"); panelMatriisi[3].setText(" 1 1 1\n 1 1 1\n 1 1 1"); panelMatriisi[4].setText("-1 -1 -1\n-1 16 -1\n-1 -1 -1"); panelMatriisi[3].setValue(5);
144
145 panelSumma2.setB(1.0);
146 }
147
148
149
152 public void vaihdaKuva() {
153 labelError.setText("");
154
155 spacePanelAlkup.removeAll();
156 spacePanelMuunnettu.removeAll();
157
158 Bitmap bm;
159 String url = editURL1.getText();
160 if ( rbURL2.isSelected() ) url = editURL2.getText();
161 try {
162
163 bm = new Bitmap(0, 0, url);
164 } catch (Exception e) {
165 labelError.setText(e.getMessage());
166 return;
167 }
168 spacePanelAlkup.add(bm);
169
170 int[][] kuva = bm.getData();
171 int[][] kuva2 = muunna(kuva, new int[][]{{1}});
172
173 for (int matindex=0; matindex<panelMatriisi.length; matindex++) {
174 int[][] painot = panelMatriisi[matindex].getMatriisi();
175 int lkm = panelMatriisi[matindex].getValue();
176 for (int i = 0; i < lkm; i++) {
177 kuva2 = muunna(kuva2, painot);
178 }
179 }
180
181 if ( panelSumma1.isSelected() ) {
182 kuva2 = summa(kuva, kuva2, panelSumma1.getA(), panelSumma1.getB());
183 }
184
185 if ( panelSumma2.isSelected() ) {
186 kuva2 = summa(kuva, kuva2, panelSumma2.getA(), panelSumma2.getB());
187 }
188
189 Bitmap bm2 = new Bitmap(0, 0, bm);
190 bm2.setData(0, 0, kuva2);
191 spacePanelMuunnettu.add(bm2);
192 }
193 }
194