回答編集履歴

2

検証コードの追加

2019/11/30 12:46

投稿

TN8001
TN8001

スコア9326

test CHANGED
@@ -8,20 +8,366 @@
8
8
 
9
9
 
10
10
 
11
- > またコードを他人に見せるのも初めてです。
12
-
13
-
14
-
15
- 私も趣味グラマですが、GitHub等にソースをあげる時は(「そんなの誰も見ないよ」と分かっていても)、最低限恥ずかしくないコードにしなきゃという気持ちになって、クオリティは上がる気がします(その分時間は取られるわけですが)
16
-
17
-
18
-
19
-
20
-
21
- > 他の人にとって見づらいかどうかすらわからない身ですが、
22
-
23
-
24
-
25
- もう少し規模が大きくならないと何とも言えませんが、見やすいと思います。
26
-
27
- menu0等の数字の連番は、ちょっとわかりにくいですね(仮置きでしょうが)
11
+ 追記
12
+
13
+ 細かい動作は見ていませんが、タイトルに*がつくのは確認できました。
14
+
15
+
16
+
17
+ ```Java
18
+
19
+ import java.awt.BorderLayout;
20
+
21
+ import java.awt.Font;
22
+
23
+ import java.awt.event.ActionEvent;
24
+
25
+ import java.awt.event.ActionListener;
26
+
27
+ import java.io.*;
28
+
29
+ import javax.swing.*;
30
+
31
+ import javax.swing.event.DocumentEvent;
32
+
33
+ import javax.swing.event.DocumentListener;
34
+
35
+
36
+
37
+ class Sample007_2 extends JFrame implements ActionListener, /*TextListener,*/ DocumentListener {
38
+
39
+
40
+
41
+
42
+
43
+ File file;
44
+
45
+ FileReader filereader;
46
+
47
+ FileWriter filewriter;
48
+
49
+ JTextArea textarea;
50
+
51
+ JMenuItem menuitem0_0, menuitem0_1, menuitem0_2, menuitem0_3;
52
+
53
+ JMenuItem menuitem1_0, menuitem1_1, menuitem1_2;
54
+
55
+ StringBuilder sb = new StringBuilder();
56
+
57
+
58
+
59
+ /*コンストラクタ*/
60
+
61
+ Sample007_2(String title) {
62
+
63
+ setTitle(title);
64
+
65
+ setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
66
+
67
+ setSize(1024, 768);
68
+
69
+
70
+
71
+ textarea = new JTextArea();
72
+
73
+ textarea.setLineWrap(true);
74
+
75
+ textarea.setFont(new Font("MS 明朝", Font.PLAIN, 24));
76
+
77
+ // textarea.addTextListener(this);
78
+
79
+ textarea.getDocument().addDocumentListener(this);
80
+
81
+ JScrollPane scrollpane = new JScrollPane(textarea);
82
+
83
+ scrollpane.setViewportView(textarea);
84
+
85
+
86
+
87
+ JMenuBar menubar = new JMenuBar();
88
+
89
+ JMenu menu0 = new JMenu("ファイル");
90
+
91
+ JMenu menu1 = new JMenu("編集");
92
+
93
+
94
+
95
+ menuitem0_0 = new JMenuItem("新規作成");
96
+
97
+ menuitem0_1 = new JMenuItem("開く");
98
+
99
+ menuitem0_2 = new JMenuItem("上書き保存");
100
+
101
+ menuitem0_3 = new JMenuItem("名前を付けて保存");
102
+
103
+
104
+
105
+ menuitem1_0 = new JMenuItem("コピー");
106
+
107
+ menuitem1_1 = new JMenuItem("切り取り");
108
+
109
+ menuitem1_2 = new JMenuItem("貼り付け");
110
+
111
+
112
+
113
+ menuitem0_0.addActionListener(this);
114
+
115
+ menuitem0_1.addActionListener(this);
116
+
117
+ menuitem0_2.addActionListener(this);
118
+
119
+ menuitem0_3.addActionListener(this);
120
+
121
+ menuitem1_0.addActionListener(this);
122
+
123
+ menuitem1_1.addActionListener(this);
124
+
125
+ menuitem1_2.addActionListener(this);
126
+
127
+
128
+
129
+ menubar.add(menu0);
130
+
131
+ menubar.add(menu1);
132
+
133
+ menu0.add(menuitem0_0);
134
+
135
+ menu0.add(menuitem0_1);
136
+
137
+ menu0.add(menuitem0_2);
138
+
139
+ menu0.add(menuitem0_3);
140
+
141
+ menu1.add(menuitem1_0);
142
+
143
+ menu1.add(menuitem1_1);
144
+
145
+ menu1.add(menuitem1_2);
146
+
147
+
148
+
149
+ setJMenuBar(menubar);
150
+
151
+
152
+
153
+ getContentPane().add(scrollpane, BorderLayout.CENTER);
154
+
155
+ }
156
+
157
+
158
+
159
+ public void actionPerformed(ActionEvent eAct) {
160
+
161
+ Object obj = eAct.getSource();
162
+
163
+ if (obj == menuitem0_0) { /*新規作成*/
164
+
165
+ file = null;
166
+
167
+ textarea.setText("");
168
+
169
+ setTitle("無題 - テキストエディタ007_2");
170
+
171
+ } else if (obj == menuitem0_1) { /*開く*/
172
+
173
+ JFileChooser filechooser = new JFileChooser();
174
+
175
+
176
+
177
+ int selected = filechooser.showOpenDialog(this);
178
+
179
+ if (selected == JFileChooser.APPROVE_OPTION) {
180
+
181
+ file = filechooser.getSelectedFile();
182
+
183
+
184
+
185
+ try {
186
+
187
+ filereader = new FileReader(file);
188
+
189
+
190
+
191
+ int ch;
192
+
193
+ while ((ch = filereader.read()) != -1) {
194
+
195
+ sb.append((char) ch);
196
+
197
+ }
198
+
199
+
200
+
201
+ textarea.setText(sb.toString());
202
+
203
+ sb.setLength(0);
204
+
205
+ setTitle(file.getName() + " - テキストエディタ007_2");
206
+
207
+ filereader.close();
208
+
209
+ } catch (FileNotFoundException e_FNF) {
210
+
211
+ System.out.println(e_FNF);
212
+
213
+ } catch (IOException e_IO) {
214
+
215
+ System.out.println(e_IO);
216
+
217
+ }
218
+
219
+ }
220
+
221
+ } else if (obj == menuitem0_2) { /*上書き保存*/
222
+
223
+ try {
224
+
225
+ if (file == null) {
226
+
227
+ saveAs();
228
+
229
+ } else {
230
+
231
+ filewriter = new FileWriter(file);
232
+
233
+ filewriter.write(textarea.getText());
234
+
235
+ filewriter.close();
236
+
237
+ setTitle(file.getName() + " - テキストエディタ007_2");
238
+
239
+ }
240
+
241
+ } catch (IOException e_IO) {
242
+
243
+ System.out.println(e_IO);
244
+
245
+ }
246
+
247
+ } else if (obj == menuitem0_3) { /*名前を付けて保存*/
248
+
249
+ saveAs();
250
+
251
+ } else if (obj == menuitem1_0) { /*コピー*/
252
+
253
+ textarea.copy();
254
+
255
+ } else if (obj == menuitem1_1) { /*切り取り*/
256
+
257
+ textarea.cut();
258
+
259
+ } else if (obj == menuitem1_2) { /*貼り付け*/
260
+
261
+ textarea.paste();
262
+
263
+ }
264
+
265
+ }
266
+
267
+
268
+
269
+ void saveAs() {
270
+
271
+ JFileChooser filechooser = new JFileChooser();
272
+
273
+
274
+
275
+ int selected = filechooser.showSaveDialog(this);
276
+
277
+ if (selected == JFileChooser.APPROVE_OPTION) {
278
+
279
+ file = filechooser.getSelectedFile();
280
+
281
+ try {
282
+
283
+ filewriter = new FileWriter(file);
284
+
285
+ filewriter.write(textarea.getText());
286
+
287
+ filewriter.close();
288
+
289
+ setTitle(file.getName() + " - テキストエディタ007_2");
290
+
291
+ } catch (IOException e_IO) {
292
+
293
+ System.out.println(e_IO);
294
+
295
+ }
296
+
297
+ }
298
+
299
+ }
300
+
301
+
302
+
303
+ // public void textValueChanged(TextEvent e_TE) {
304
+
305
+ // if (file == null) {
306
+
307
+ // setTitle("*無題 - テキストエディタ007_2");
308
+
309
+ // } else {
310
+
311
+ // setTitle("*" + file.getName() + " - テキストエディタ007_2");
312
+
313
+ // }
314
+
315
+ // }
316
+
317
+
318
+
319
+ @Override
320
+
321
+ public void insertUpdate(DocumentEvent e) {
322
+
323
+ if (file == null) {
324
+
325
+ setTitle("*無題 - テキストエディタ007_2");
326
+
327
+ } else {
328
+
329
+ setTitle("*" + file.getName() + " - テキストエディタ007_2");
330
+
331
+ }
332
+
333
+ }
334
+
335
+
336
+
337
+ @Override
338
+
339
+ public void removeUpdate(DocumentEvent e) {
340
+
341
+ if (file == null) {
342
+
343
+ setTitle("*無題 - テキストエディタ007_2");
344
+
345
+ } else {
346
+
347
+ setTitle("*" + file.getName() + " - テキストエディタ007_2");
348
+
349
+ }
350
+
351
+ }
352
+
353
+
354
+
355
+ @Override
356
+
357
+ public void changedUpdate(DocumentEvent e) {
358
+
359
+ }
360
+
361
+
362
+
363
+ public static void main(String[] args) {
364
+
365
+ Sample007_2 frame = new Sample007_2("無題 - テキストエディタ007_2");
366
+
367
+ frame.setVisible(true);
368
+
369
+ }
370
+
371
+ }
372
+
373
+ ```

1

誤字

2019/11/30 12:45

投稿

TN8001
TN8001

スコア9326

test CHANGED
@@ -12,7 +12,7 @@
12
12
 
13
13
 
14
14
 
15
- 私も趣味グラマですが、GitHub等にソースをあげる時は(「そんなの誰も見ないよ」と分かっていても)、最低限恥ずかしくないコードにしなきゃという気持ちになって、クオリティは上がる気がします(その分時間は取られるわけですが)
15
+ 私も趣味グラマですが、GitHub等にソースをあげる時は(「そんなの誰も見ないよ」と分かっていても)、最低限恥ずかしくないコードにしなきゃという気持ちになって、クオリティは上がる気がします(その分時間は取られるわけですが)
16
16
 
17
17
 
18
18