2011-12-31 2 views
3

私は、NetBeansを使用して、グラフィックスをjPanelに描画することができます: ![ここに画像の説明を入力してください] [1]NetBeansのJpanelデザインモードでクラス内のペイントメソッド

アプレットのフォームを:

package Experimento2; 

import javax.swing.*; 
import java.awt.*; 


public class Experimento2 extends javax.swing.JApplet { 


    public void init() { 
     try { 
      java.awt.EventQueue.invokeAndWait(new Runnable() { 
       public void run() { 
        initComponents(); 
       } 
      }); 
     } catch (Exception ex) { 
      ex.printStackTrace(); 
     } 
    } 


    @SuppressWarnings("unchecked") 
    // <editor-fold defaultstate="collapsed" desc="Generated Code"> 
    private void initComponents() { 

     jPanel1 = new javax.swing.JPanel(); 
     //ZonaGrafica zg = new ZonaGrafica(); 
     jButton1 = new javax.swing.JButton(); 
     jButton2 = new javax.swing.JButton(); 

     javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1); 
     jPanel1.setLayout(jPanel1Layout); 
     jPanel1Layout.setHorizontalGroup(
      jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
      .addGap(0, 466, Short.MAX_VALUE) 
     ); 
     jPanel1Layout.setVerticalGroup(
      jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
      .addGap(0, 259, Short.MAX_VALUE) 
     ); 

     jButton1.setText("jButton1"); 

     jButton2.setText("jButton2"); 

     javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane()); 
     getContentPane().setLayout(layout); 
     layout.setHorizontalGroup(
      layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
      .addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) 
      .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() 
       .addGap(27, 27, 27) 
       .addComponent(jButton1, javax.swing.GroupLayout.PREFERRED_SIZE, 175, javax.swing.GroupLayout.PREFERRED_SIZE) 
       .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 54, Short.MAX_VALUE) 
       .addComponent(jButton2, javax.swing.GroupLayout.PREFERRED_SIZE, 187, javax.swing.GroupLayout.PREFERRED_SIZE) 
       .addGap(23, 23, 23)) 
     ); 
     layout.setVerticalGroup(
      layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
      .addGroup(layout.createSequentialGroup() 
       .addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) 
       .addGap(85, 85, 85) 
       .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) 
        .addComponent(jButton2, javax.swing.GroupLayout.PREFERRED_SIZE, 61, javax.swing.GroupLayout.PREFERRED_SIZE) 
        .addComponent(jButton1, javax.swing.GroupLayout.PREFERRED_SIZE, 61, javax.swing.GroupLayout.PREFERRED_SIZE)) 
       .addGap(37, 37, 37)) 
     ); 

     //jPanel1.add(zg,BorderLayout.CENTER); 
     //zg.repaint(); 
    }// </editor-fold> 


    // Variables declaration - do not modify 
    private javax.swing.JButton jButton1; 
    private javax.swing.JButton jButton2; 
    private javax.swing.JPanel jPanel1; 
    // End of variables declaration 

} 

と同じパッケージ内にあるZonaGraficaクラス、:

package Experimento2; 

import javax.swing.JApplet; 
import java.awt.*; 

public class ZonaGrafica extends JApplet{ 

    @Override 
    public void paint(Graphics g) { 
     super.paint(g); 

     g.setColor(Color.red); 
     g.fillOval(45, 65, 34, 54); 
     g.fillOval(45, 120, 34, 54); 
     g.fillOval(45, 180, 34, 54); 
    } 
} 

しかし、私はJAppletのを実行すると、残念ながら、何も起こりません 形。ペイント方法が赤い楕円を描く場所では何も表示されません。私はこの問題を解決する手がかりがなく、誰かが私にそれを解決するのを助けてくれることに感謝します。

答えて

3

塗料をオーバーライドしないでください。代わりにpaintComponentを試してみてください。

あなたのZonaGraficaオブジェクトは決してインスタンス化されません(コメントされます)。私はあなたが少なくともそれをやっていることを願っています。

さらに、JApplet(ZonaGrafica)を別のJApplet(Experimento2)に広告しようとしています。 ZonaGraficaをリファクタリングし、JPanelまたはJLabelを拡張させます。

+0

FYI:JPanelはデフォルトで(JLabelとJComponentではなく)不透明であるため、最後の編集は不要です(ただし、他のすべてはお金の上にあります - 1+)。 –

+0

@ Hovercraft Eelsの完全:ありがとう。もう私はSwingを使用していないのです。私は何かを忘れた。 – Heisenbug

1

フォームエディタはpaintまたはpaintComponentをオーバーライドして動作しますが、Heisenbugの提案ではpaintComponentとなりますが、依然として良好です。

あなたのコードを読んでから、「コードをカスタマイズ」ボタンを押して数行を追加して、それを並べ替えると思ったと思います。理由はありません:

  1. GroupLayoutはこのように機能しません。 UIを追加するアプローチはまったく種類がありません。someContainer.add()
  2. それでは、ボーダーレイアウト定数は意味をなさない。
  3. デザイン時には、コードは実行されません。フォームエディタは、XMLドキュメントを使用して、どのコンポーネントをインスタンス化し、どのように追跡するかを追跡するので、JPanelを追加してコンストラクタをカスタマイズして読み込みなどしても、カスタムペイントロジックは表示されません。 jPanel3 = new ZonaGrafica();。どのように私にもたらす:
  4. コンポーネントを設計時に正しく表示させるには、最初にコンパイルしてから、エディタの[Add Java Bean]機能を使用してフォームに追加するしかありません。あなたのコードがJPanelをサブクラス化している場合は、JButtonをサブクラス化するとフォームエディタでJPanelとして動作します。編集者。

したがって、(1)コードをコンパイルし、(2)「Java Beanの追加」機能を使用してZoneGraficaを追加します。そのためには完全修飾クラス名(たとえばcom.foo.ZonaGrafica)を知る必要があります。

+0

または、ユーザーフレンドリーなレイアウトを使用してください。 :) 1 +素晴らしい提案! –