2012-01-24 6 views
1

オーバーライドされたペイントコンポーネントのテストで問題が発生しています。junitテストのオーバーライドされたペイントコンポーネント

私は物事

@Override 
    protected void paintComponent(Graphics g) { 
       g.setColor(Color.RED); 
       int y = //some come; 
       int height = //some code 
       //for loop 
       g.clearRect(1, y, getWidth(), height); 
       g.drawRect(1, y, getWidth(), height); 
      } 
     } 
     super.paintComponent(g); 
    } 

マイ塗料コンポーネントは、複数の長方形を作成を簡素化するためにたくさんにコードを削除しました。描かれた矩形の数とその高さについての詳細を知る必要があります。私はこれを行うために単体テストをする方法がわかりません。

私はTextAreas 'getComponents()メソッドを使用しようとしましたが、nullを返します。 repaint()を呼び出すとpaintコンポーネントが実行されると思った。任意のヘルプ

答えて

2

ため

おかげで私は考えることができる2つの解決策があります。

BufferedImageからGraphicsを使用して、コンポーネントのpaintメソッドを呼び出しますが。したがって、

BufferedImage bi = new BufferedImage(width,height, BufferedImage.TYPE_INT_ARGB); 
Graphics2D g2 = bi.createGraphics(); 
yourComponent.setSize(width,height); 
yourComponent.paint(g2); 
g2.dispose(); 

biの内容を分析します。

オプション2を使用すると、コンポーネントが描画した内容を公開することができます。長方形が描かれているときに、あなたが何をしているかを記録します。それから、オブジェクトから利用可能にします。これは、特定のディメンションが必要な場合に、より便利です。

private StringBuilder sb = new StringBuilder(); 
public String getOperations() { 
    return sb.toString(); 
} 
@Override 
protected void paintComponent(Graphics g) { 
    sb.setSize(0); 
    g.setColor(Color.RED); 
    sb.append("Color(red),"); 
    int y = //some come; 
    int height = //some code 
    //for loop 
    g.clearRect(1, y, getWidth(), height); 
    sb.append("Clear(").append(getWidth()),append(",") 
     .append(height).append("),"); 
    g.drawRect(1, y, getWidth(), height); 
    sb.append("drawRect(").append(1),append(","),append(y).append(",") 
     .append(getWidth()),append(","),append(height).append("),"); 
    g.dispose(); 
    super.paintComponent(g); 
} 
+0

上記はうまくいきます。ありがとうございました。私はyourComponent.paintComponent(g2)の後にgetComponents()メソッドを呼び出そうとしました。 g.drawRect(1、y、getWidth()、height)を実行していても、コンポーネントがないことを示します。 – Decrypter

+0

'getComponents()'メソッドは*子コンポーネントを返します。したがって、もしあなたが 'JPanel p'を持っていて、' p.add(l) 'で' JLabel l 'を追加すると、 'p.getComponents()'は 'l'を返します。ただし、 'paintComponent'をオーバーライドしても子コンポーネントは追加されません。 –

0

は、それは私がg.drawRect(1、Y、のgetWidth()、高さ)を行うにもかかわらず、何のコンポーネントが存在しないと言います。

コンポーネントをパネルに追加していないため、コンポーネントがありません。 drawRect(...)メソッドは、四角形のアウトラインのみを描画し、コンポーネントは作成しません。

"矩形の形"を描画する場合は、ArrayListを使用して図形に関する情報を格納します。 ArrayListを使用する例については、Custom Painting ApproachesDrawOnComponentの例を参照してください。

関連する問題