teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

2

書式及び質問内容の分割

2015/11/29 09:37

投稿

nasulrj
nasulrj

スコア38

title CHANGED
@@ -1,1 +1,1 @@
1
- 続・Javaプログラミグ電卓いて
1
+ Java Swing】Aボタンには1.wavBボタンには2.wavと音を使分け鳴らしたい(続・電卓)
body CHANGED
@@ -1,125 +1,22 @@
1
1
  前回お見苦しい中回答してくださった方有難うございました。
2
2
  色々参考しながらなんとかSwingを使って電卓として計算機能は出来上がりました。
3
- 今回は、卓上電卓の機能にもあるMS(値の保存)、MR(値の書き出)とwavサウンドの使分け、背景設置ところ躓いたので知恵をおかください
3
+ 質問事項を盛り込みすぎてややこしいので1つずつ質問ます
4
- よろしくお願いします
4
+ まずはSEの音の使い分けについてお願いします┏○))ペコり
5
5
 
6
- 電卓
7
- 【ボタン】
8
- ・1~9,0、小数点、四則演算、=、AC(オールクリア)、MS、MR
9
- 【ラベル】
10
- ・ラベル1:ボタンを押した該当の数字と小数点及び計算結果を表示(ex.1,2,3)
11
- ・ラベル2:計算式のみ表示(ex.1+2)
12
- 【背景】
13
- ボタンを透過処理する(完成)
14
- jpgファイル使用(質問部分)
15
6
 
16
- 【内部機能】
17
- ・四則演算(完成)
18
- ・MS,MR機能(質問部分)
19
- ・ボタンによるwavファイルの使い分け(理想としては数字ボタン、四則演算、=ボタンの使い分け)(質問部分)
20
7
 
21
- **【完成イメージ】**
22
- ![イメージ説明](fd689d00d6ceb306c41de1958c7f6ad0.png)
23
-
24
-
25
-
26
- ##質問
8
+ ##質問
27
- MS、MRの処理を以下に記載しているのですが、MSボタンを押し値は保存するものの四則演算ボタンを押してからMRボタンを押した時は消えて空白が表示されます。
28
- 値を退避させているにもかかわらず消えてしまいます。どこが悪いのでしょうか?
29
-
30
- ```dentaku.java(ボタン押下処理より記載)
31
- class dentaku{
32
- public void actionPerformed(ActionEvent ae) {
33
- // TODO 自動生成されたメソッド・スタブ
34
- JButton source = (JButton)ae.getSource();
35
-
36
- //数値ボタンが押された時の処理
37
- numberbutton(source);
38
- fugoubutton(source);
39
-
40
- }
41
-
42
- private void numberbutton(JButton source){
43
- // TODO 自動生成されたメソッド・スタブ
44
- //buttonが押された時の処理
45
-
46
-
47
-
48
- if(source ==this.btnms){
49
- ifbuff = true;
50
-
51
- sbuff = tempb; //値の退避
52
-
53
-
54
- }else if(source ==this.btnmr){
55
- tempb.append(new String(sbuff)); //値の取得のはずが実際は空白が出力
56
- tempp.append(new String(sbuff));
57
- }
58
-
59
- lbl_a.setText(new String(tempb));
60
- lbl_q.setText(new String(tempp));
61
-
62
-
63
- }
64
-
65
-
66
-
67
- private void fugoubutton(JButton source) {
68
- // TODO 自動生成されたメソッド・スタブ
69
- if((source==btnp) || (source == btnm) || (source ==btnk) || (source== btnd)||(source == btne)){
70
- if(ifbuff == true){
71
- buff=Keisan(saveb,sbuff);
72
-
73
- sbuff.setLength(0);
74
-
75
-
76
- }else if(ifbuff==false){
77
- buff =Keisan(saveb,tempb);
78
-
79
-
80
- }
81
- saveb.replace(0, buff.length(), buff);
82
- tempb.setLength(0);
83
-
84
-
85
-
86
- if (source == this.btne) {
87
- lbl_a.setText(new String(saveb)); // 結果表示
88
- saveb.setLength(0);
89
- saveb.append("0");
90
- tempb.setLength(0);
91
- tempp.setLength(0);
92
- sbuff.setLength(0);
93
- fugou = 0;
94
- }else if(source==btnp){
95
- fugou = 1;
96
- lbl_q.setText(new String(tempp.append("+")));
97
- }else if(source==btnm){
98
- fugou = 2;
99
- lbl_q.setText(new String(tempp.append("-")));
100
- }else if(source==btnk){
101
- fugou = 3;
102
- lbl_q.setText(new String(tempp.append("×")));
103
- }else if(source == btnd){
104
- fugou = 4;
105
- lbl_q.setText(new String(tempp.append("÷")));
106
- }
107
-
108
-
109
- }
110
-
111
-
112
- }
113
- }
114
- ```
115
-
116
-
117
- ##質問②
118
9
  ボタンを押した時にwavファイルを再生させているのですが、stop();を入れてしまうと、最初から音が再生されません。
119
10
  最低でも数字ボタンと=ボタンの音は違う音を再生させたいのですが、全て同じ音の再生になってしまいます。
120
11
  どうすれば使い分けることができるのでしょうか?
12
+ 2.wavのところに1.wavと同じ内容をコピーしてみましたがうまく再生されませんでした。
121
13
 
122
- ```
14
+ ```-dentaku.java
15
+ public class dentaku extends JFrame implements ActionListener {
16
+ Clip clip;
17
+ AudioInputStream ais,ais2;
18
+
19
+
123
20
  public void actionPerformed(ActionEvent ae) {
124
21
  // TODO 自動生成されたメソッド・スタブ
125
22
  JButton source = (JButton)ae.getSource();
@@ -138,18 +35,20 @@
138
35
  try
139
36
  {
140
37
  ais = AudioSystem.getAudioInputStream("1.wav");
38
+ ais2 = AudioSystem.getAudioInputStream("2.wav");
141
39
  AudioFormat audioFormat = ais.getFormat();
142
40
  DataLine.Info info = new DataLine.Info(Clip.class, audioFormat);
143
41
  clip = (Clip)AudioSystem.getLine(info);
144
42
 
145
43
 
146
- if (source == this.btn0){
44
+ if (source == this.btnA){
147
45
  tempb.append("0");
148
46
  tempp.append("0");
149
47
  clip.open(ais);
150
48
  clip.start();
151
- }else if(source == this.btnac){
49
+ }else if(source == this.btnB){
152
50
  //ここに2.wavを再生させたい
51
+
153
52
  tempb.setLength(0);
154
53
  tempp.setLength(0);
155
54
  saveb.setLength(0);
@@ -157,43 +56,13 @@
157
56
  saveb.append("0");
158
57
  ans = 0.0f;
159
58
  fugou = 0;
160
- }
161
-
162
- private String Keisan(StringBuilder saveb2, StringBuilder tempb2) {
163
- // TODO 自動生成されたメソッド・スタブ
164
- float val1 = Float.parseFloat(saveb2.toString());
165
- float val2 = Float.parseFloat(tempb2.toString());
166
- ans =0.0f;
167
-
168
- //四則演算の処理(完成)
169
-
170
59
  }
60
+ }catch (UnsupportedAudioFileException e)
61
+ { e.printStackTrace(); }
62
+ catch (IOException e)
63
+ { e.printStackTrace(); }
64
+ catch (LineUnavailableException e)
65
+ { e.printStackTrace(); }
66
+ }
171
67
 
172
- ```
173
-
174
-
175
- ##質問③
176
- 電卓に背景をjpgファイルで使用したいのですが、以下のソースコードでやると重たくて起動時に一緒に設置してあるボタンとラベルがなかなか表示してくれなくて困っています。
177
- 背景のjpgファイルのザイズは40KBくらいです。
178
- どうしたら早く表示できますか?
179
-
180
- ```lang-dentaku.java
181
- class dentaku {
182
-
183
-
184
-
185
- //背景表示
186
- try {
187
- image = ImageIO.read(new File("img/haikei.jpg"));
188
-
189
- } catch (IOException e) {
190
- image = null;
191
- e.printStackTrace();
192
- }
193
-
194
- public void paint(Graphics g) {
195
- g.drawImage(image, 0, 0, this);
196
- paint(g);
197
- }
198
- }
199
68
  ```

1

2015/11/29 09:37

投稿

nasulrj
nasulrj

スコア38

title CHANGED
File without changes
body CHANGED
File without changes