Javaでのグラフィック表示のエラー解決方法

このQ&Aのポイント
  • Javaでのグラフィック表示において、画面上部に表示させたい図形が一瞬表示されてから消える問題が発生しています。エリアを明確に分ける方法をご教示いただけませんか?
  • 他言語のDelphiやC++Builderのように、グラフィックのエリアとコントロールのエリアを分ける方法を知りたいです。
  • Javaでグラフィック表示を行っている際、図形が一瞬表示されてから消えてしまう現象が発生します。この問題を解決する方法を教えてください。
回答を見る
  • ベストアンサー

Javaでのグラフィック表示について

お世話になります。 今、画面上部にグラフィックの緑の四角の塗りつぶし、 下部にボタンを同時に表示させたいと思い、下記の様なカンタンなサンプルで試しています。 これだと、同時に表示されずに、一瞬、緑の四角が表示されてから消えて、ボタンだけが表示されます。 これを解決するには、どの様にすれば良いか教えていただけませんでしょうか? 他言語のDelphiやC++Builderの様に、Imageコントロールのエリアを配置して、グラフィックのエリアとコントロールのエリアを明確に分けることができれば、尚嬉しいのですが、その様な方法について 情報をいただけませんでしょうか? よろしくお願いします。 // // // public void init(){         //         cpMain=getContentPane();         cpMain.setBackground( new Color( 255, 255, 0 ) );         cpMain.setLayout( null );         //         cpMain.add( btnDraw );         btnDraw.setBounds( 100, 300, 200, 20 );         // } // // // public void paint( Graphics g ){          //          Color c = new Color( 0, 255, 0, 255 );          g.setColor(c);          g.fillRect( 100, 100, 200, 150 );          // }

  • maigo
  • お礼率35% (37/103)
  • Java
  • 回答数1
  • ありがとう数1

質問者が選んだベストアンサー

  • ベストアンサー
  • LancerVII
  • ベストアンサー率51% (1060/2054)
回答No.1

こんにちは。 Swingでしたらこんな感じでいけると思います。 import宣言や起動クラスは端折ってます。 コントロール部のパネルと描画部分のパネルを作ってメインとなるフレームで使用するイメージです。 ==== MainFrame.java public class MainFrame extends JFrame { private GraphicsPanel f_graphicsPanel; private ButtonPanel f_buttonPanel; public MainFrame() { // フレームの設定 this.setLayout ( null ); this.setSize ( 800, 250 ); this.setTitle ( "Q8240834" ); this.setDefaultCloseOperation ( JFrame.EXIT_ON_CLOSE ); f_graphicsPanel = new GraphicsPanel(); f_graphicsPanel.setBounds ( 0, 0, 590, 250 ); this.add ( f_graphicsPanel ); f_buttonPanel = new ButtonPanel ( this ); f_buttonPanel.setBounds ( 600, 0, 200, 250 ); this.add ( f_buttonPanel ); } public void changeColor() { f_graphicsPanel.changeColor(); } } ==== GraphicsPanel.java public class GraphicsPanel extends JPanel { private Color f_colorFore; public GraphicsPanel() { f_colorFore = Color.WHITE; } public void paintComponent ( Graphics g ) { g.setColor ( new Color(0,0,0) ); g.fillRect ( 0, 0, this.getWidth(), this.getHeight() ); g.setColor ( f_colorFore ); g.fillRect ( 10, 10, 200, 150 ); } public void changeColor() { Random rnd = new Random(); f_colorFore = new Color ( rnd.nextInt(256), rnd.nextInt(256), rnd.nextInt(256) ); repaint(); } } ==== ButtonPanel.java public class ButtonPanel extends JPanel implements ActionListener { private MainFrame f_mainFrame; private JButton btn1; private JButton btn2; public ButtonPanel ( MainFrame _mainFrame ) { f_mainFrame = _mainFrame; this.setLayout ( new BorderLayout() ); this.setBackground ( Color.DARK_GRAY ); btn1 = new JButton ( "ボタン1" ); this.add ( BorderLayout.NORTH, btn1 ); btn2 = new JButton ( "変更" ); btn2.setActionCommand ( "change" ); btn2.addActionListener ( this ); this.add ( BorderLayout.CENTER, btn2 ); } public void actionPerformed ( ActionEvent _e ) { String strCommand = _e.getActionCommand(); if ( "change".equals(strCommand) ) { f_mainFrame.changeColor(); } } }

maigo
質問者

お礼

御礼が遅くなりまして申し訳ございませんでした。 試してみて、出来る事が確認できました。 ありがとうございました。 また、何かあったらよろしくお願いします。

関連するQ&A

  • JAVAのプログラミングについて

    色変更というボタンを押すたびに、正方形の中の色が緑から青、青から緑というように繰り返し色が変わるプログラムを作りたいのですが、途中までは、完成できたのですが、ここからどうすればいいかわかりません。教えてください。 import java.awt.*; import java.applet.*; import java.awt.event.*; public class kadai3Applet extends Applet implements ActionListener { int i = 1; Button collor; public void init(){ collor = new Button("色変更"); collor.addActionListener(this); add(collor); } public void paint(Graphics g){ g.setColor(Color.green); g.fillRect(50,50,50,50); } public void actionPerformed(ActionEvent e){ if(e.getSource() == collor){ } repaint(); } }

  • 透過色について

    ある本で透過色の設定方法について書いていました。 Color c = new Color(255,0,0,50); このように第4引数に0~255の値を入れることでその色の透過の度合いが設定できると書いていました。 しかし、次のプログラムを実行してみても色付の四角さえ描かれませんでした。 ※import文省略 public class clear extends Applet{ public void paint(Graphics g){ g.setColor(new Color(255,0,0,128)); g.fillRect(0,0,50,50); } } 予想だと、赤色の半透明な四角が出るはずだったのですが、何も出ませんでした。 ※第4引数を書かずにすると普通に赤色の四角は出ました。 第4引数に値を入れると透過色ができるというのは、うそなのでしょうか?

    • ベストアンサー
    • Java
  • JAVA イベント処理について

    ボタンをクリックすれば表示されている色が変わるというプログラムを作っています。 それで、パネルを作ってそこにボタンを4つくっつけているのですが、 Panel p=new Panel(); for(i=0;i<N;i++) p.add(bn[i]); p.setBackground(Color.orange); add(p,"South"); addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e){ System.exit(0);} }); } 上のような感じでsouth=下にボタンが横に4つならんで表示されるようになっているのですが、 ボタンを縦に並べたいのですがプログラムがわかりません。 分かる方教えてください。お願いします。

  • javaについて質問

    import javax.swing.*; import java.awt.Color; import java.awt.Graphics; import java.awt.event.*; public class tt extends JFrame { public tt(){ setTitle("hogehoge"); setBounds( 10, 10, 300, 200); JButton btn1 = new JButton("続ける"); final JPanel p = new JPanel(); p.setBackground(Color.white); btn1.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent event){ } } ); p.add(btn1); getContentPane().add(p); } public static void main(String[] args){ tt test = new tt(); test.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); test.setVisible(true); /* 実際に表示する */ } } Graphics g; g.drawString("ほげさんじょう",130,120);を追加しても コンパイルが通りません。 どうすれば画面に文字列を表示するんですか? あとテキストフィールドを追加するさいに、座標していとかして追加できないんですか?

  • java.awt.Label を縁取り表示したい

    Javaバージョンは、JDK-1.2.2_017 です。 (このバージョンじゃないと駄目なんです) ラベルの表示をするのにjava.awt.Labelを使用しているのですが、 ・Labelの縁取り(枠のようなもの) ・ボタンのように浮き上がらせる というようなことが、Labelクラスで可能でしょうか。 ラベルの見た目を変えたいので、どなたかご存知のかたいらっしゃいましたら 教えてください。お願いします。 import java.applet.Applet; import java.awt.*; public class label1 extends Applet { public void init(){ Label Lab = (Label)add(new Label("Label1" , Label.CENTER)); Lab.setText("test"); setBackground(Color.blue); add(Lab); } }

  • java アプレット

    学校の授業でアプレットを学んでいます。 しかし・・・ 下のプログラムで、計算した結果をlabel3にはりつけたいのですが、計算結果がでてくれません・・・ボタンを押しても何もでてきません。 コマンドプロンプトで、エラーはでてきません。 お手数ですが、誰かどこがいけないのか教えて下さい。 import java.awt.*; import java.awt.event.*; public class B extends java.applet.Applet implements ActionListener { Label label3 = new Label(); Button button2 = new Button(); TextField textfield1= new TextField(10); TextField textfield2= new TextField(10); public void init() { button2.setLabel("入力したらクリック!"); button2.setBounds(new Rectangle(50, 465, 120, 20)); this.setLayout(null); label3.setBackground(Color.blue); label3.setBounds(new Rectangle(325, 80, 200, 35)); textfield1.setBounds(100, 425, 100, 25); textfield2.setBounds(150, 350, 100, 25); this.add(textfield2, null); this.add(label3, null); this.add(textfield1, null); this.add(button2, null);} public void actionPerformed(ActionEvent event) {if(event.getSource() == button2) {int diff = Integer.parseInt(textfield1.getText()) - Integer.parseInt(textfield2.getText()); String otsuri; otsuri ="お釣りは"+ diff +"円です。"; label3.setText(otsuri);} }} よろしくお願いします。

    • ベストアンサー
    • Java
  • 長方形をドラッグするJavaアップレット

    Javaアップレットについてです。長方形の内部でドラッグすることで、長方形を移動できるプログラ厶を作りたいのですが、うまくいきません。どうしても分からないので、改善点がありましたらアドバイスをお願いします。 詳しい仕様は、 ・長方形の内部でマウスボタンを押し、マウスボタンを押したままマウスを移動すると、移動した量だけ長方形を移動して表示する。 ・マウスボタンを離すと、その位置に長方形を描く。 ・長方形を持ち上げている感じを出すために、マウスボタンを押したときとドラッグ中は、長方形を正確な位置から少しずらして表示し、その下に影を描く。 です。 プログラ厶は以下のとおり import java.awt.*; import java.applet.*; import java.awt.event.*; public class ex1118 extends Applet implements MouseListener, MouseMotionListener{ //長方形の最初の位置 Rectangle r1 = new Rectangle(80,100,80,60); //マウスボタンを押した位置 Point p1; //マウスボタンを離した位置 Point p2; //長方形の内部にあるかどうか boolean enter = false; public void init(){ addMouseListener(this); addMouseMotionListener(this); } public void paint(Graphics g){ g.fillRect(r1.x, r1.y, r1.width, r1.height); if(enter){ //影をつける g.setColor(Color.gray); g.fillRect(p1.x, p1.y, r1.width, r1.height); //少しずらす g.setColor(Color.black); g.fillRect(p1.x - 10, p1.y - 10, r1.width, r1.height); } else if(!enter){ r1.x = r1.x + (p2.x - p1.x); r1.y = r1.y + (p2.y - p1.y); g.fillRect(r1.x, r1.y, r1.width, r1.height); } } public void mousePressed(MouseEvent e){ enter = r1.contains(e.getPoint()); if(enter) p1 = e.getPoint(); p2 = null; repaint(); } public void mouseDragged(MouseEvent e){ if(enter) p2 = e.getPoint(); repaint(); } public void mouseReleased(MouseEvent e){ enter = false; p2 = e.getPoint(); repaint(); } public void mouseClicked(MouseEvent e){} public void mouseEntered(MouseEvent e){} public void mouseExited(MouseEvent e){} public void mouseMoved(MouseEvent e){} }

    • ベストアンサー
    • Java
  • グラフィックの描画をするとButtonが表示されない

    グラフィックの描画をするとasp:buttonが表示されなくなったのですが、どうすれよろしいでしょうか? aspx.csファイルに下記を記述しました。 protected void Page_Load(object sender,EventArgs e) {   Bitmap bitmap = new Bitmap(100,100);   Graphics grp = Graphics.FromImage(bitmap);   grp.Clear(Color.DarkCyan);   Response.ContentType = "image/jpeg";   bitmap.Save(Response.OutputStream, ImageFormat.Gif);   bitmap.Dispose();   graphics.Dispose(); } あとはデザイン画面でボタンを1個張り付けましたが、ボタンが表示されません。 どうすればよろしいでしょうか?

  • アプレットにテキストボックスが表示されません

     こんばんは、Java初心者です、宜しくお願いします。  アプレットを表示、背景に画像を表示させ、テキストボックス に文字、数字を入力するプログラムを書きました。  背景の画像は表示されるのですが、テキストボックスは 表示されません。  何故でしょうか、原因がよく分かりません。 宜しくお願い致します。 ============================================== public class TextboxTest extends Applet { MediaTracker tracker ; Image img ; TextTest tet ; public void init() { tracker = new MediaTracker( this ) ; img = getImage( getDocumentBase() , "../a.jpg" ) ; tracker.addImage( img , 0 ) ; } public void start() { try { tracker.waitForAll(); } catch (InterruptedException e) { } } public void paint( Graphics g2 ) { g2 = getGraphics(); g2.drawImage( img , 50 , 50 , 250 , 250 , this ) ; } public void abc( ) { tet = new TextTest() ; } } //=================================================================== class TextTest extends Applet implements ActionListener { JTextField jt0 ; Double lon = 0.0 ; public void init() { setLayout( null ) ; jt0 = new JTextField( "" ) ; jt0.setBounds( 150 , 150 , 100 , 30 ) ; this.add( jt0 ) ; Button bt = new Button( "Input" ) ; bt.setFont( new Font( "SansSerif" , Font.BOLD , 20 ) ) ; Color d = new Color( 0xff00ff ); bt.setBackground( d ) ; bt.setForeground( new Color( 0.0f , 0.0f , 0.0f ) ) ; bt.setBounds( 100 , 200 , 220 , 40 ) ; bt.addActionListener( this ) ; this.add( bt ) ; } public void actionPerformed( ActionEvent ae ) { jttest(); } void jttest() { try { String str_lon = jt0.getText() ; lon = Double.parseDouble( str_lon ) ; System.out.println( "lon =" + lon ) ; } catch( Exception ee ) { } } }

    • ベストアンサー
    • Java
  • javaアプレットの課題について

    大学の授業の課題についてなんですが、 javaアプレットを使って 「徐々に大きな四角形を表示させ、ある程度の大きさの四角形になったらまた最初に戻り、さらにボタンを表示させ、ボタンを押す度に四角形の拡大をストップ、スタートさせるプログラムを作れ。また、マウスでクリックした部分を中心に、徐々に大きな四角形を表示させるようにもするように。」 という、自分でも書いていて分からなくなりそうな内容の課題が出されまして、先生などのアドバイスを頼りに import java.applet; import java.awt.Graphics; import java.awt.event.ActionListener; import java.awt.event.ActionEvent; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.awt.Color; import java.awt.Button; public class Report1 extends Applet implements ActionListener,Runnable { int x = 10; int y = 10; Button bt; public void init() { addMouseListener(new MouseAdapter() { public void mousePressed(MouseEvent e) { x = e.getX(); y = e.getY(); repaint(); } }); { bt.setLabel("pause"); } while{ } if() repaint(); public void paint(Graphics g) { g.setColor(Color, white); g.fillRect(0, 0, 400, 400); } public void update(Graphics g){ paint(); 何とか上のような感じにまではこぎつけたのですが、 ここからは正直どうすればいいのか検討がつかず お手上げ状態なんです... どなたか解答又は参考になるサイトがあれば 教えていただけないでしょうか? よろしくお願いします。

    • ベストアンサー
    • Java

専門家に質問してみよう