2012-04-24 20 views
0

私はJavaでペイントプログラムを作成することができます。私は何かを創造することができたが、私が望むものを正確に作り出していない。JFrameに直接ペイントできません

私の問題は、IDEが提供するオプションからIDE(NetBeans 7.0.1)にJFrameを作成できず、ペイントクラスを正しく呼び出すことができないということです。

具体的には、あるパネル(たとえばPanel1)からボタンを押し、同じフレーム内のPanel2にペイントしたいとします。クラスの

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {           

    PaintFlower102 f = new PaintFlower102(); 
} 

パート:クラスの呼び出しだ

super("Drag to Paint"); 
    getContentPane().add(new Label ("Click and Drag"),BorderLayout.SOUTH); 
    // add(new JButton("Brush 20"),BorderLayout.NORTH); 
    addMouseMotionListener(new MouseMotionAdapter() { 

     @Override 
     public void mouseDragged(MouseEvent event) { 
      xval=event.getX(); 
      yval=event.getY(); 
      repaint(); 
     } 
    }); 

    setSize(500, 500); 
    setVisible(true); 
    setDefaultCloseOperation(PaintFlower102.DISPOSE_ON_CLOSE); 
} 

public void paint(Graphics g) {  
    g.fillOval(xval, yval, 10, 10); 
} 

問題は、私はクラスでextend JFrameを入れていない場合、これは動作しないということです。そして私がするなら、それは私が描くことができる新しいフレームを作ります。

+0

宿題のような割り当て?より多くのコードを追加してください。合理的なアドバイスができるほど不十分です。 –

答えて

7

提案:

  • が今まで絶対必要のまれな状況を除いたJFrameに直接塗らないでください(これはその一つではありません)。
  • 代わりにJPanel、JComponent、またはJComponentの他の派生物にペイントします。
  • paint(Graphics g)ではなく、クラスのpaintComponent(Graphics g)メソッドでペイントします。
  • Javaチュートリアルをよく読んでお読みください。 Trail: 2D GraphicsPerforming Custom Paintingをチェックしてください。
+1

+1、かなり正確に私が言っただろう! – berry120

+0

返事をありがとう。 しかし、JFrameにペイントする必要はなく、JPanelにペイントする必要がなければ、IDEからJFrameとパネルを作成するときに、パネルからペイントメソッドを呼び出す方法があります。 私は私の質問を理解してくれることを願っています。 たとえば、ボタンを押した場合、メソッドを呼び出すイベントリスナーを追加する必要がありますか? – Leonidas

+0

@Leonidas:paintメソッドやpaintcomponentメソッドを直接呼び出すことはありません。代わりに、メソッドのオーバーライドを作成し、呼び出す場合は 'repaint()'を呼び出します。また、スーパークラスのメソッドをオーバーライドすることをIDEに指示する方法もあります。これがあなたがすべきことです。私自身は、NetBeansを使用せず、Swing GUIを手作業でコーディングします。 –

0

私は間違っているかもしれませんが、あなたはsuper.paintComponent(g)を含める必要があり、Hovercraft Full of EelsのようにpaintComponentメソッドをオーバーライドする必要があると思います。

public void paintComponent(Graphics g) { 
    super.paintComponent(g);  

    // Draw Oval 
    g.fillOval(xval, yval, 10, 10); 
} 
関連する問題