//cd c:\HPBasic\Toppage-sample3\MySwing/Omikuji-Jar //javac Omikuji.java //set CLASSPATH=. //appletviewer Omikuji.html //appletviewer Omikuji.java //jar cvf Omikujis.jar *.class *.jpg import java.applet.*; import java.awt.*; import java.awt.event.*; import java.net.*; import javax.swing.*; /* */ public class Omikuji extends JApplet implements ActionListener { JLabel label1; public void init(){ Container pane = getContentPane(); String html1=""; JButton uranai = new JButton(html1 + "あなたの運勢は?"); uranai.addActionListener(this); pane.add(uranai,BorderLayout.WEST); label1 = new JLabel(""); pane.add(label1,BorderLayout.EAST); MyPanel panel=new MyPanel(); Dimension d =new Dimension(600,412); panel.setPreferredSize(d); pane.add(panel,BorderLayout.SOUTH); } public void actionPerformed(ActionEvent event) { String[] omikuji = {"大吉","吉","小吉","小凶","凶","大凶"}; int n = (int)Math.floor(Math.random()*6); String message = " すべてうまくいくが、調子に乗らぬこと"; String message1 = " 小さな喜び事あり。争いを避けること"; String message2 = " これからが肝心。今の調子でがんばれ"; String message3 = " 思わぬところに落とし穴が。用心すべし"; String message4 = " 何事も辛抱"; String message5 = " 今が最悪期。これから徐々に運が上向く"; String html2=""; String html3="

"; switch (n) { case 0: label1.setText(html2 + omikuji[0] + html3 + message); break; case 1: label1.setText(html2 + omikuji[1] + html3 + message1); break; case 2: label1.setText(html2 + omikuji[2] + html3 + message2); break; case 3: label1.setText(html2 + omikuji[3] + html3 + message3); break; case 4: label1.setText(html2 + omikuji[4] + html3 + message4); break; case 5: label1.setText(html2 + omikuji[5] + html3 + message5); break; } } class MyPanel extends JPanel { public void paintComponent(Graphics g) { super.paintComponent(g); java.awt.Image image = getImage(getCodeBase(),getParameter("file")); // java.awt.Image image =getImage(getDocumentBase(),getParameter("file")); g.drawImage (image,0,0,this); } } } /* 結論 c:\HPBasic\Toppage-sample3\Java-menue.htmlでは、MySwingのOmikuji.java とOmikuji2.java を併用。 Omikuji.javaでできたと思ったが、アップしたもので見ると、まただめになった。 java.lang.NoSuchMethodError: MyPanel.(Ljava/awt/Image;)V at Omikuji.init(Omikuji.java:33) 33行目とは Image image = getImage(getDocumentBase(),getParameter("file")); Omikuji.javaをOmikuji100.javaとして、新しいOmikuji.javaは、画像を同じフォルダにおく。 Omikuji100.java getDocumentBase()でも同じ C:\HPBasic\Toppage-sample3\MySwing>javac Omikuji.java Omikuji.java:32: 互換性のない型 検出値 : java.awt.Image 期待値 : Image Image image = getImage(getCodeBase(),getParameter("file")); java.awt.Image image として、解決。 あわせて、MyPanel extends JPanelを内部クラスとして、引数渡ししていたものをはずし、java.awt.Image image = getImage(getCodeBase(),getParameter("file"));を直接、MyPanelに書いた。内部クラスゆえ、JAppletとの関連もとれているか? ^ Omikuji.java:71: シンボルを解決できません。 シンボル: メソッド drawImage (Image,int,int,MyPanel) 場所 : java.awt.Graphics の クラス g.drawImage (image,0,0,this); ^ エラー 2 個 1 Omikuji1.java 画像を別のpaneにする方法はわからないので、「独習」P450のCanvasにImageを描画して、それをpaneにaddした。それがOmikuji1.javaで、写真もimageフォルダの弁天堂に変えた。引数つきのコンストラクタも必要で、簡単になったともいえないが、Omikuji1.javaとする。 2 しかし、「コアJava2 Vol1.1基礎編」P335によると、Canvasやpaintは古いAWTのもの、swingではPanelとpaintComponentがよいとあり、変更した。 panel.setSize(600,412);ではだめで、JComponentから継承したpanel.setPreferredSize(d); としたが゛引数として、Dimensionを要求された。 d =new Dimension(600,412); swing配下で、paintを使うときの方法か? 3 Omikuji5.java Image image = Toolkit.getDefaultToolkit().getImage("../image/shinobazu47.jpg");とする方法を「Core Java」P365でみつけて、トライした。MyPanelの中に直接かけていけそうだし簡単。一度 "shinobazu47.jpg" でできたと思ったが、勘違いだったか? Omikuji.javaの、Image image = getImage(getDocumentBase(),getParameter("file"));をMyPanelの中に直接書くと、getParameterがエラーとなる。 4 Omikuji2.java Image imageではなく、ImageIcon icon 使用。その方が本命かもしれない。 (経緯はOmikuji2.javaのコメントに)。 5 Omikuji10.java Omikuji.javaの前段のトライ、canvasもpanelも使わないとき、 として、 image = getImage(getDocumentBase(),getParameter("file")); で受けて、 public void paint(Graphics g) { g.drawImage (image,0,150,this); } とする。画像は出るが、御神籤のJButtonが遅くなり、位置制御もうまくいかない。 */