//cd c:\HPBasic\Toppage-sample3\MySwing\Slideshow100 //set CLASSPATH=. //javac Slideshow5.java //appletviewer Slideshow5.html //appletviewer Slideshow5.java import java.applet.*; import java.awt.*; import java.awt.event.*; import javax.swing.*; import java.net.*; /* */ public class Slideshow5 extends JApplet implements ActionListener, Runnable { Container contentPane; JButton startButton; JButton stopButton; AudioClip onceClip; SlidePanel5 slidepanel5; ImageIcon[] images; Thread t; int i; int n = 7; //NUM_IMAGES String[] str={"コスモス(昭和記念公園 2003)","コスモス1","コスモス2", "コスモス3","コスモス4","コスモス5","コスモス6"}; String slideName = "kosmos"; String midiFile= "coroptica.mid"; static int height; static ImageIcon img; static String str2; public void init(){ contentPane = getContentPane(); JPanel minipanel= new JPanel(); startButton = new JButton("Start"); stopButton = new JButton("Stop"); startButton.addActionListener(this); stopButton.addActionListener(this); images = new ImageIcon[n]; for (int j = 0; j < n; j++) { String imageName = slideName + j + ".jpg"; try{images[j]=new ImageIcon(new URL(getCodeBase(),imageName)); } catch (Exception e) {} } Dimension d = getSize(); height = d.height; System.out.println("init height = " + height); contentPane.add(minipanel,BorderLayout.NORTH); minipanel.add(startButton); minipanel.add(stopButton); minipanel.setBackground(Color.green); slidepanel5=new SlidePanel5(); contentPane.add(slidepanel5,BorderLayout.CENTER); slidepanel5.setBackground(Color.yellow); } public void actionPerformed(ActionEvent event) { Object source = event.getSource(); if (source == startButton) { onceClip = getAudioClip(getCodeBase(),midiFile); onceClip.play(); //AudioPlay // スレッドを起動する t = new Thread(this); t.start(); } if (source == stopButton) { onceClip.stop(); //AudioStop stop(); } } public void run() { try { Thread mythread = Thread.currentThread(); i=0; while(t == mythread) { start(); Thread.sleep(3000); i++; if (i == n) i=0; } } catch (Exception e) { } } public void start() { img=images[i]; str2=str[i]; System.out.println("start i = " + i); slidepanel5.init(); } public void stop() { t=null; } } class SlidePanel5 extends JPanel { ImageIcon imgicon; String string; int height; public void init() { string=Slideshow5.str2; imgicon=Slideshow5.img; height= Slideshow5.height; System.out.println("SlidePanel5 init string = " + string + " height = " + height); repaint(); } public void paintComponent(Graphics g) { super.paintComponent(g); System.out.println("paintComponent string = " + string); g.setFont(new Font("Serif", Font.BOLD, 30)); g.setColor(Color.blue); g.drawString(string,220,height-50); imgicon.paintIcon(this,g,50,30); } } /* 別クラスSlidePanelを内部クラスとせずに成功した唯一の例。 写真画像、説明文、アプレットの高さをオブジェクト変数で受け取ろうとしたが、それらの初期値しか受けとれず失敗(Slideshow100/Slideshow50)。 しかし、いずれもクラス変数としてあっさり解決(Slideshow100/Slideshow5)。 なお、Slideshowクラスから引数つきのSlidePanelコンストラクタを作って、引数で 渡そうとしたが、最初の写真と説明しか出ない(Slideshow100/Slideshow)。 C:\HPBasic\Toppage-sample3\MySwing\Slideshow100>appletviewer Slideshow5.html init height = 600 start i = 0 SlidePanel5 init string = コスモス(昭和記念公園 2003) height = 600 paintComponent string = コスモス(昭和記念公園 2003) start i = 0 SlidePanel5 init string = コスモス(昭和記念公園 2003) height = 600 paintComponent string = コスモス(昭和記念公園 2003) start i = 1 SlidePanel5 init string = コスモス1 height = 600 paintComponent string = コスモス1 start i = 2 SlidePanel5 init string = コスモス2 height = 600 paintComponent string = コスモス2 start i = 3 SlidePanel5 init string = コスモス3 height = 600 paintComponent string = コスモス3 */