//cd c:\HPBasic\Toppage-sample3\MySwing/Sound11-Jar //set CLASSPATH=. //javac Sound11.java //appletviewer Sound11.html //jar cvf Sound11s.jar *.java *.class *.mid import java.applet.*; import java.awt.*; import java.awt.event.*; import javax.swing.*; /* */ public class Sound11 extends JApplet implements ActionListener { JComboBox cb; JButton play1; JButton stop1; AudioClip onceClip; public void init() { Container contentPane=getContentPane(); String[] midifile={"coroptica.mid","meim.mid","mazurka4.mid", "calkwalk.mid", "gagaku.mid","ieraisha.mid", "ny_bass.mid","sc.mid"}; cb = new JComboBox(midifile); cb.addActionListener(this); contentPane.add(cb,BorderLayout.WEST); play1 = new JButton("Play"); play1.addActionListener(this); contentPane.add(play1,BorderLayout.CENTER); stop1 = new JButton("Stop"); stop1.setEnabled(false); stop1.setMnemonic(KeyEvent.VK_M); stop1.addActionListener(this); contentPane.add(stop1,BorderLayout.EAST); } public void actionPerformed(ActionEvent event) { //Midiファイルの選択 String cbmidi = (String)cb.getSelectedItem(); // String midiD = "../midi/"; onceClip = getAudioClip(getCodeBase(),cbmidi); //Buttonの表示を見る String source = event.getActionCommand(); if ( source == "Play") { onceClip.play(); //Play it once. showStatus(cbmidi + " play" + "."); stop1.setEnabled(true); return; } if (source =="Stop") { onceClip.stop(); //Stop the sound. showStatus(cbmidi + " stop" + "."); stop1.setEnabled(false); return; } } } /* 0 String cbmidi = (String)event.getSelectedItem();は、 Sound11.java:51: シンボルを解決できません。 シンボル: メソッド getSelectedItem () 場所 : java.awt.event.ActionEvent の クラス String cbmidi = (String)event.getSelectedItem(); のエラー。 String cbmidi = (String)cb.getSelectedItem();として、OK。 下記2の (ComboBoxDemo.javaには、actionPerformedの中で使っている)を参考にした。 1 public void stop() { onceClip.stop(); //Cut short the one-time sound. } をいれると、実行はするが、ブラウザーツールーサンのJavaコンソール でエラー。 Soundも同じ 以下は、Sound8.javaへのコメント 1 JComboBoxは、actionPerformed が使えて、直接、選択を受けることができる。 JComboBox cbmidi = (JComboBox)event.getSource(); でよい。 そうすると、JButtonのstop のactionPerformedがきかなくなるので、妥協した。 2 itemStateChanged(ItemEvent ie) は、java.awt.event のインターフェイス ItemListener のメソッド。 cbmidi = (String)ie.getItem(); getItem()は、JComboBoxのメソッド、親クラスにもないのだが? JComboBoxのメソッドにある、getSelectedItem()を使うと、下記のエラー。 Sound8.java:48: シンボルを解決できません。 シンボル: メソッド getSelectedItem () 場所 : java.awt.event.ItemEvent の クラス cbmidi = (String)ie.getSelectedItem(); (ComboBoxDemo.javaには、actionPerformedの中で使っている。) 3 public void itemSelectable(ItemEvent ie) { c = (Choice)ie.getItemSelectable(); cbmidi = (String)ie.getSelectedOblects(); } itemSelectableは、awt の Choice のときのもの。 4 implements ActionListener,Sequencer { Sequencer onceClip; onceClip = MidiSystem.getSequencer(); などとしたが、^ D:\JavaTry\AudioSwing>javac Sound8.java Sound8.java:12: パッケージ javax.sound は存在しません import javax.sound.*; Sound8.java:20: シンボルを解決できません。 シンボル: クラス Sequencer implements ActionListener,Sequencer { Sound8.java:26: シンボルを解決できません。 Sequencer onceClip; Sound8.java:68: シンボルを解決できません。 シンボル: 変数 MidiSystem onceClip = MidiSystem.getSequencer(); Sound8.java:71: シンボルを解決できません。 シンボル: メソッド play () play(); //Play it once. エラー 5 個となる。 //import javax.swing.border.*; //import javax.swing.event.*; JLabel label; cb.setBorder(new TitleBorder("Midiファイルの選択")); cb.setSelectedIndex(7); label= new JLabel(" "); contentPane.add(label,BorderLayout.CENTER); JComboBox cbmidi = (JComboBox)event.getSource(); String midiName = (String)cbmidi.getSelectedItem(); label.setText(midiName); AbstractButton sb = (AbstractButton)event.getSource(); sb.getText(); label.setText(source); label.setText(cbmidi); public void itemSelectable(ItemEvent ie) { c = (Choice)ie.getItemSelectable(); // cbmidi = (String)ie.getSelectedOblects(); } */