• 締切済み

ウインドウアプリケーション

すみませんが、描画を行うアプレットを作りたいのですが、??がついているところがわからないので教えてもらえますか? import java.awt.*; import java.awt.event.*; class JaDrawFrame extends Frame implements ItemListener, ActionListener { CheckboxGroup color_cbx, shape_cbx; Checkbox c1, c2, c3, s1, s2, s3; Button bt1, bt2; Panel northpanel, southpanel; ??/* northpanelはNORTH用のパネル,southpanelはSOUTH用のパネル*/ int color = 1, shape = 1; ??/* color は色を指定する変数1:赤, 2:緑, 3: 青*/ ??/* shape は形を指定する変数1:円, 2:四角, 3: 直線*/ boolean disp = false; ??/* dispがtrueの時描画,falseの時消去*/ public JaDrawFrame(String title) { setTitle(title); addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) {System.exit(0);} }); setLayout(new BorderLayout()); color_cbx = new CheckboxGroup(); shape_cbx = new CheckboxGroup(); northpanel = new Panel(); ??/* Northの2つのチェックボックスグループの設定*/ add(northpanel, BorderLayout.NORTH); southpanel = new Panel(); ??/* Southのボタン設定*/ add(southpanel,BorderLayout.SOUTH); } public void itemStateChanged(ItemEvent e) { ??/* チェックボックスのイベント処理*/ } public void actionPerformed(ActionEvent e) { Button bt = (Button) e.getSource(); ??/* ボタンのイベント処理*/ repaint(); } public void paint(Graphics g) { if (disp) { if(color == 1) g.setColor(Color.red); else if(color == 2) g.setColor(Color.green); else g.setColor(Color.blue); if(shape == 1) g.drawOval(100,100,100,100); else if(shape == 2) g.drawRect(100,100,100,100); else g.drawLine(100,100,200,200); } else { g.clearRect(100,100,100,100); } } } public class JaDrawFrame { public static void main(String args[]) { JaDrawFrame frm = new JaDrawFrame(“DrawFrame"); // フレームの生成 frm.setSize(400, 300); // 窓サイズ横、縦 frm.setVisible(true); // フレームを表示する } }

みんなの回答

回答No.1

プログラムをつけるなら、とりあえずコンパイルできるものをつけて下さい。 コンパイルエラーがわからないなら、そういう質問にして下さい。 質問タイトルは「ウインドウアプリケーション」でJFrameを継承してるけど、 アプレットを作りたいの?アプレットを作りたいならAppletを継承しないといけないのでは? 最初の4つの「??」の部分はコメント?穴埋めの問題?問題にしては直前に変数がちゃんとあるし…。 それとも「/*」「*/」がよくわからないってこと??? 「/*」と「*/」で囲まれた部分は「コメント」として記述できて、プログラムとしては無視されます。 最初の4つ以外の「??」部分は具体的に何がしたいの? 何がしたいのかわからなければ答えようがないよ。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • アプリケーション

    初歩的な質問ですが下のプログラムを書いたのですが表示されませんでした。下のプログラムのどこが間違ってますか? これが問題です。 ・フレームに部品を配置するプログラムを作成しなさい。  BorderLayoutによりボタン1,テキストエリア,ボタン2が配置  ボタン1をクリックするとテキストエリアに文字を埋める  ボタン2をクリックするとテキストエリアをクリアする import java.awt.*; import java.awt.event.*; class MyFrame extends Frame implements ActionListener { TextArea txtar1; Button btn1, btn2; public MyFrame(String title) { super(title) ; // タイトル設定 addWindowListener(new WindowAdapter(){// 閉じるボタン対応 public void windowClosing(WindowEvent e){ System.exit(0); } }); } public void init(){ setLayout(new BorderLayout(5,5)); // 文字列表示のボタンをBorderLayoutの北に配置 btn1=new Button("文字列表示"); add(btn1,BorderLayout.NORTH); txtar1 = new TextArea(); add(txtar1,BorderLayout.CENTER);// テキストエリアをBorderLayoutの中央に配置 btn2=new Button("文字列クリア"); add(btn2,BorderLayout.SOUTH); // 文字列クリアのボタンをBorderLayoutの南に配置 } public void actionPerformed (ActionEvent e) { // ボタン押下対応 if (e.getSource() == btn1) { txtar1.setText("AAAAAAAAAA\nBBBBBBBBBB\nCCCCCCCCCC\n"); } else if (e.getSource() == btn2) { txtar1.setText("");   }  } } public class JaFram { public static void main(String args[]) { MyFrame frm = new MyFrame("フレームテスト"); frm.setSize(300, 200); // 窓サイズを横300,縦200にする frm.setVisible(true) ; // フレームを表示する  } }

  • Enterキーでボタンを押すにはどうすればいいのでしょうか

    色を指定するチェックボックスがあり,表示ボタンで指定された色の混色を表示するプログラムです. このプログラムに,Enterキーの入力に表示ボタンを押したのと同じ効果をもたせたいのですが,どうすればいいでしょうか. また,requestFocusInWindow()をどこに挿入すればうまくいくのでしょうか. *************************************************************** import java.applet.Applet; import java.awt.*; import java.awt.event.*; public class Q1 extends Applet implements ActionListener { // チェックボックス3つとボタン1つ Checkbox cbx1, cbx2, cbx3; int red = -1, green, blue; Button btn; public void init() { cbx1 = new Checkbox("Red"); cbx2 = new Checkbox("Green"); cbx3 = new Checkbox("Blue"); add(cbx1); add(cbx2); add(cbx3); btn = new Button("Paint"); btn.addActionListener(this); add(btn); addKeyListener(new KeyAdapter() { public void KeyPressed(KeyEvent ke) { if (ke.getKeyCode() != KeyEvent.VK_ENTER) return; SetColor(); repaint(); } }); } // ボタンを押したとき public void actionPerformed(ActionEvent e) { SetColor(); repaint(); } // 色の設定 public void CheckColor() { if (cbx1.getState()) red = 255; else red = 0; if (cbx2.getState()) green = 255; else green = 0; if (cbx3.getState()) blue = 255; else blue = 0; } // 色付き長方形の表示 public void paint(Graphics g) { if (red != -1) { g.setColor(new Color(red, green, blue)); g.fillRect(10, 50, getSize().width - 20, getSize().height - 40); } } } *******************************************************************

    • ベストアンサー
    • Java
  • JavaApplet

    Appletで 円が徐々に大きくなる。 一定の直径を超えるたびに色が変わる。 最大まで大きくなったら、縮んで色を変えながらもとの大きさに戻る。 というのを延々繰り返すものを作りました。 コードは以下です。 import java.applet.*; import java.awt.*; import java.awt.Color; public class project4 extends Applet implements Runnable{ int x; Thread th; public void start(){ th = new Thread(this); th.start(); } public void run(){ while(1==1) { for (x =0; x<=180; ++x) { repaint(); try{ Thread.sleep(100); } catch( InterruptedException e){ } } for (; x>=0; --x) { repaint(); try{ Thread.sleep(100); } catch( InterruptedException e){ } } } } public void paint (Graphics g){ if (x<=18) {g.setColor(Color.blue); } g.fillOval(150,150,20+x,20+x); if ((x >18) && (x<=36)) {g.setColor(Color.darkGray); } g.fillOval(150,150,20+x,20+x); if ((x >36) && (x<=54)) {g.setColor(Color.yellow); } g.fillOval(150,150,20+x,20+x); if ((x >54) && (x<=72)) {g.setColor(Color.green); } g.fillOval(150,150,20+x,20+x); if ((x >72) && (x<=90)) {g.setColor(Color.orange); } g.fillOval(150,150,20+x,20+x); if ((x >90) && (x<=108)) {g.setColor(Color.red); } g.fillOval(150,150,20+x,20+x); if ((x >72) && (x<=108)) {g.setColor(Color.yellow); } g.fillOval(150,150,20+x,20+x); if ((x >108) && (x<=126)) {g.setColor(Color.magenta); } g.fillOval(150,150,20+x,20+x); if ((x >126) && (x<=144)) {g.setColor(Color.orange); } g.fillOval(150,150,20+x,20+x); if ((x >144) && (x<=162)) {g.setColor(Color.cyan); } g.fillOval(150,150,20+x,20+x); if ((x >162) && (x<=180)) {g.setColor(Color.pink); } g.fillOval(150,150,20+x,20+x); } } ここに ボタンを押したら、円の動きがとまる というeventを増やしたいのですが、どうすればよいかアドバイスをいただけませんか。ボタンを使うにはActionListenerを実装しなければならないと思うのですがRunnableと共存はできますか?

    • ベストアンサー
    • Java
  • javaでgraphicsの描画の件

    今日は javaでgraphicsの描画を行っていますが、CENTERのペインには、描画できますが、 それ以外のペイン(NORTH,WEST、EAST,、SOUTH)には、描画できないように思います。 Q1)この件について、コメント頂けますと大変助かります。 下記に、ソースコードを添付いたします。 =================== package pkg; import java.awt.BasicStroke; import java.awt.BorderLayout; import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.geom.Line2D; import javax.swing.JFrame; import javax.swing.JPanel; public class SampleApp extends JFrame { public SampleApp(){ this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.setSize(600, 300); this.add(new GPanel(), BorderLayout.WEST); this.add(new GPanel(), BorderLayout.CENTER); } public static void main(String[] args) { new SampleApp().setVisible(true); } } class GPanel extends JPanel { @Override public void paintComponent(Graphics g) { super.paintComponent(g); // int w = this.getWidth(); // int h = this.getHeight(); int w=200; int h=200; g.setColor(Color.RED); g.fillOval(0, 0, w/2, h/2); Graphics2D g2 = (Graphics2D)g; g2.draw(new Line2D.Double(40, 40, w,h)); g.setColor(Color.BLUE); g.setFont(new Font("Serif", Font.BOLD, 36)); g.drawString("Graphics draw!", 10, h - 50); // g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); g2.draw(new Line2D.Double(30.0d, 50.0d, 180.0d, 140.0d)); g2.setPaint(Color.PINK); BasicStroke wideStroke = new BasicStroke(8.0f); g2.setStroke(wideStroke); g2.draw(new Line2D.Double(30.0d, 120.0d, 250.0d, 70.0d)); } }

    • ベストアンサー
    • Java
  • 画面遷移について困ってます。

    TITLE →(Enterクリック)→ GAME というふうにしたいのですが…できません><どこがダメなんでしょうか。 import java.awt.Color; import java.awt.Graphics; import java.awt.event.KeyEvent; import java.awt.event.KeyListener; import javax.swing.JFrame; import javax.swing.JPanel; public class JavaGame3 { public static void main(String age[]) { JFrame frame = new JFrame(); frame.setTitle("ゲームフレーム"); frame.setSize(500, 550); frame.setLocation(1000, 200); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setVisible(true); Testpanel panel = new Testpanel(); frame.add(panel); } } class Testpanel extends JPanel implements KeyListener { static final int TITLE = 0; // タイトルモード static final int GAME = 1; // ゲームモード int mode; public Testpanel() { setBackground(Color.black); addKeyListener(this); mode = TITLE; // 最初はタイトル画面 } private void drawTitle(Graphics g) { g.setColor(Color.blue); g.drawString("test1", 165, 150); g.setColor(Color.white); g.drawString("Hit Enter Key!", 150, 350); } private void drawGameOver(Graphics g) { g.setColor(Color.white); g.fillRect(5,120,240,30); g.setColor(Color.red); g.drawString("test2", 85, 140); } public void paintComponent(Graphics g) { super.paintComponent(g); if(mode == TITLE) { drawTitle(g); } else if(mode == GAME) { drawGameOver(g); } } public void keyPressed(KeyEvent e){ int key = e.getKeyCode(); if(mode == TITLE) { switch(key) { case KeyEvent.VK_ENTER: mode = GAME; break; } }repaint(); } public void keyReleased(KeyEvent e){} public void keyTyped(KeyEvent e){} }

    • ベストアンサー
    • Java
  • javaのプログラムについて

    初めまして。java初心者のものです。 コンピュータとじゃんけんをするというプログラムをつくりたいのですが、 コンパイルしたところ、次のようなエラーが出ました。 「シンボルが見つかりません。」 どこをどう直せばよいのでしょうか。お教え願います。 以下が私のプログラムです。 import java.awt.event.*; import java.awt.*; import javax.swing.*; import java.applet.AudioClip; class Zyanken extends YJFrame implements ActionListener{ JButton[] btn; JPanel panel; Zyanken(String s, int w, int h,int b){ super(s,w,h,b); String[] ttl={"グー","チョキ","パー","Exit"}; String[] tips={"グーです","チョキです","パーです","終了します"}; int i; setUp(); Icon[] ic=new Icon[4]; for(i=0;i<4;i++) ic[i]=new ImageIcon("icon"+i+".gif"); btn=new JButton[4]; for(i=0;i<4;i++){ btn[i]=new JButton(ttl[i],ic[i]); btn[i].setToolTipText(tips[i]); btn[i].addActionListener(this); } JPanel p=new JPanel(); for(i=0;i<4;i++) p.add(btn[i]); p.setBackground(Color.pink); pane.add(p,BorderLayout.SOUTH); panel=new JPanel(); pane.add(panel,BorderLayout.CENTER); } public void actionPerformed(ActionEvent e){ int com=(int)(Math.random()*4); if(com==1){ panel.setText("COMはグーです。"); } else if(com==2){ panel.setText("COMはチョキです。"); } else{ panel.setText("COMはパーです。"); } if(e.getSource()==btn){ if(com==1){ panel.setText("あいこです。"); } else if(com==2){ panel.setText("あなたの勝ちです。"); } else{ panel.setText("あなたの負けです。"); } } else if(e.getSource()==btn){ if(com==1){ panel.setText("あなたの負けです。"); } else if(com==2){ panel.setText("あいこです。"); } else{ panel.setText("あなたの勝ちです。"); } } else{ if(com==1){ panel.setText("あなたの勝ちです。"); } else if(com==2){ panel.setText("あなたの負けです。"); } else{ panel.setText("あいこです。"); } } } } 大変恐縮ですが、よろしくお願いします。

  • java 初心者です。

    COMとじゃんけんをし、勝敗を決定するというプログラムを作りたいのですが、 コンパイルしたところ、33行目に「シンボルが見つけられません」というエラーが出ます。 (合計12個のエラーがでます) どこを直せばこのエラーは解決されるのでしょうか。 すいませんが、よろしくお願いします。 以下がプログラムです。 import java.awt.event.*; import java.awt.*; import javax.swing.*; class Zyanken extends YJFrame implements ActionListener{ JButton[] btn; JPanel panel; Zyanken(String s, int w, int h,int b){ super(s,w,h,b); String[] ttl={"グー","チョキ","パー","Exit"}; String[] tips={"グーです","チョキです","パーです","終了します"}; int i; setUp(); Icon[] ic=new Icon[4]; for(i=0;i<4;i++) ic[i]=new ImageIcon("icon"+i+".gif"); btn=new JButton[4]; for(i=0;i<4;i++){ btn[i]=new JButton(ttl[i],ic[i]); btn[i].setToolTipText(tips[i]); btn[i].addActionListener(this); } JPanel p=new JPanel(); for(i=0;i<4;i++) p.add(btn[i]); p.setBackground(Color.pink); pane.add(p,BorderLayout.SOUTH); panel=new JPanel(); pane.add(panel,BorderLayout.CENTER); } public void actionPerformed(ActionEvent e){ int com=(int)(Math.random()*4); if(com==1){ panel.setText("COMはグーです。"); } else if(com==2){ panel.setText("COMはチョキです。"); } else{ panel.setText("COMはパーです。"); } if(e.getSource()==btn){ if(com==1){ panel.setText("あいこです。"); } else if(com==2){ panel.setText("あなたの勝ちです。"); } else{ panel.setText("あなたの負けです。"); } } else if(e.getSource()==btn){ if(com==1){ panel.setText("あなたの負けです。"); } else if(com==2){ panel.setText("あいこです。"); } else{ panel.setText("あなたの勝ちです。"); } } else{ if(com==1){ panel.setText("あなたの勝ちです。"); } else if(com==2){ panel.setText("あなたの負けです。"); } else{ panel.setText("あいこです。"); } } } }

  • javaのJPanel重ね時、repaint

    JPanelの上にJPanelを重ね、上のJPanelを透過させました。 この状態で両方のパネルでstartを行います。 下記の結果では、両方が動いています。 目標として、片方のパネルが描写をのこし、片方のパネルが再描写するのが理想です。 誰かお教えください。 import javax.swing.JFrame; import java.awt.*; public class Test extends Object { public static void main(String[] arguments){ TestViewU Upanel = new TestViewU();//上のパネル TestViewS Spanel = new TestViewS();//下のパネル Upanel.setLocation(new Point(0, 0)); Upanel.setLayout(null); Upanel.setOpaque(false); Spanel.setLocation(new Point(0, 0)); Spanel.setLayout(null); Spanel.add(Upanel); Upanel.setSize(new Dimension(800, 600)); Spanel.setSize(new Dimension(800, 600)); JFrame aWindow; aWindow = new JFrame("MVC-"); aWindow.getContentPane().add(Spanel); aWindow.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); aWindow.setSize(800, 600); aWindow.setVisible(true); Spanel.start(); Upanel.start(); } } import java.awt.*; import javax.swing.*; public class TestViewS extends JPanel implements Runnable{ static Thread thread; private static int interval_time = 5; int a = 100; int b = 100; public TestViewS(){ setBackground(Color.WHITE); } public void paintComponent(Graphics g){ super.paintComponent(g); g.setColor(Color.BLUE); g.fillRect(a, b, 10, 10); } void start() { thread = new Thread(this); thread.start(); } public void run() { boolean checkA = true; boolean checkB = true; Thread thisThread = Thread.currentThread(); while (thisThread == thread) { try { if(checkA && checkB){ a++;} else if(!checkA && checkB){ b++;} else if(!checkA && !checkB){ a--;} else if(checkA && !checkB){ b--;} if(a == 701){ checkA = !checkA; a--;} else if(a == 99){ checkA = !checkA; a++;} if(b == 501){ checkB = !checkB; b--;} else if(b == 99){ checkB = !checkB; b++;} repaint(); Thread.sleep(interval_time); } catch (InterruptedException ie) { thread = null; break;}} } } import java.awt.*; import javax.swing.*; public class TestViewU extends JPanel implements Runnable{ static Thread thread; private static int interval_time = 5; int a = 200; int b = 200; public TestViewU(){ } public void paintComponent(Graphics g){ super.paintComponent(g); g.setColor(Color.RED); g.fillRect(a, b, 10, 10); } void start() { thread = new Thread(this); thread.start(); } public void run() { boolean checkA = true; boolean checkB = true; Thread thisThread = Thread.currentThread(); while (thisThread == thread) { try { if(checkA && checkB){ a++;} else if(!checkA && checkB){ b++;} else if(!checkA && !checkB){ a--;} else if(checkA && !checkB){ b--;} if(a == 601){ checkA = !checkA; a--;} else if(a == 199){ checkA = !checkA; a++;} if(b == 401){ checkB = !checkB; b--;} else if(b == 199){ checkB = !checkB; b++;} repaint(a, b, 10, 10); Thread.sleep(interval_time); } catch (InterruptedException ie) { thread = null; break;}} } }

  •  型Containerのメソッドadd(String ,Compone

     型Containerのメソッドadd(String ,Component)は引数(JPanel ,String)に適用できません。  今晩は、java初心者です、エラーの意味が理解出来ません、宜しくお願い致します。  《A》というプログラムと《B》というプログラムで、クラスを「class MyPanel extends JPanel」と「class JPanel」に変えただけで、「型Containerのメソッドadd(String ,Component)は引数(JPanel ,String)に適用できません。」というエラーがでます。  一体何が原因でしょうか。  JPanelを継承したクラス(MyPanel)を呼び出すのか、そのまま、JPanelクラスを呼び出すのかの違いだけで、内容的には何も変わるところがないはずだと思うのですが。  意味が理解出来ません。 ======================================================================== 《A》 public class Sample extends JFrame { Sample() { this.setSize(300,200); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); MyPanel panel = new MyPanel(); this.add(panel , BorderLayout.CENTER); this.setVisible(true); } public static void main(String[] args) { new Sample(); } } class MyPanel extends JPanel { public void paintComponent(Graphics g) { g.setColor(Color.red); g.fillOval(50,50,100,100); } } ============================================================ 《B》 public class Sample extends JFrame { Sample() { this.setSize(300,200); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); JPanel panel = new JPanel(); this.add(panel , BorderLayout.CENTER); this.setVisible(true); } public static void main(String[] args) { new Sample(); } } class JPanel { public void paintComponent(Graphics g) { g.setColor(Color.red); g.fillOval(50,50,100,100); } } =======================================================================

    • ベストアンサー
    • Java
  • paint()以外でサブ関数を作りたい

     今晩は、java初心者です、宜しくお願いします。  下の様なウインドウに文字を書くサブ関数を作りましたが、うまく実行出来ません。  しかし、public void paint( Graphics g){ }の中に書いてやるとうまく文字が表示されます。  何故か理由が分かりません。  public void paint( Graphics g ){ }は、Componentクラスのメッソドをオーバーライドしている だけなので、別名のサブ関数で「Graphics g」を引数にとれば同じ考えだと思うのですが、 実行出来ない理由が理解できません。  public void drawLetter( Graphics g )としても、エラーが出るばかりです。  その原因が分かりません、宜しくお願いします。 ==================================================================== public void drawLetter( ) { Graphics aa = getGraphics() ; aa.setFont( new Font( "MS ゴシック" , Font.BOLD , 15 ) ) ; aa.setColor( Color.green ) ; aa.drawString( "String" , 0 , 0 ) ; } ============================================================= public class P1 extends Applet { public void init() { setBackground( Color.cyan ) ; setSize( 600 , 600 ) ; drawLetter( ) ; } public void drawLetter( ) { Graphics aa = getGraphics() ; aa.setFont( new Font( "MS ゴシック" , Font.BOLD , 15 ) ) ; aa.setColor( Color.green ) ; aa.drawString( "String" , 0 , 0 ) ; } public void paint( Graphics g ) { g.setColor( Color.RED ) ; g.drawOval( 300 , 300 , 70 , 70 ) ; g.setColor( Color.RED ) ; g.fillOval( 200 , 200 , 30 , 30 ) ; /* g.setFont( new Font( "MS ゴシック" , Font.BOLD , 15 ) ) ; g.setColor( Color.BLUE ) ; g.drawString( "Orbit" , 50 , 50 ) ; */ } } =======================================================================

    • ベストアンサー
    • Java