2016-05-31 7 views
-1

私は2つのクラスを持っていますが、1つのクラスは私のGUIフレームビューアです。もう1つは、自分のプロジェクトで使用しようとしているクラスです。 LabeledBarクラスはdrawメソッドを提供します。私は自分のFrameViewerクラスにLabeledBarsのArrayListを持っています。私はそのリストを繰り返して、これらのバーを保持する新しいパネルを作成したいと思います。私はこれらのバーをそのフレームにどのように描くのかを決めることはできません。使い方を作成する方法クラスから別のクラスのJPanelにメソッドを描画します

import java.awt.Color; 
import java.awt.Graphics2D; 
import java.awt.Rectangle; 
import java.awt.geom.Line2D; 
/** LabeledBar is a rectangle with an interior label. 
* 
* 
*/ 
public class LabeledBar 
{ 
    private int xLeft; 
    private int yTop; 
    private int width; 
    private int height; 
    private String label; 
    private Color color; 
    /** Construct this object from the specified dimensions. 
    * @param x x coordinate of the upper-left corner of this bar. 
    * @param y y coordinate of the upper-left corner of this bar. 
    * @param aWidth width of the bar in pixels. 
    * @param label the text to be displayed inside the bar. 
    * @param color desired color of the lines of the bar. 
    */ 
    public LabeledBar(int x, int y, int aWidth, String label, Color color) 
    { 
     xLeft = x; 
     yTop = y; 
     width = aWidth; 
     height = 20; 
     this.label = label; 
     this.color = color; 
    } 

    /** Draw this bar on the supplied graphics context. 
    * @param g2 the context on which to draw this bar. 
    */ 
    public void draw(Graphics2D g2) 
    { 
     Rectangle leftRectangle = new Rectangle(
      xLeft, yTop, 
      width, height); 

     g2.setColor(color); 
     g2.draw(leftRectangle); 
     g2.drawString(label, xLeft+height/4, yTop+height*3/4); 
    } 
} 

これは私の他のクラスのメソッドで、labeledBarsを含む新しいJFrameを作成しようとしたときの方法です。

private void paintBars() 
{ 
    Graphics2D g = (Graphics2D)labeledBarsFrame.getGraphics(); 

    for (LabeledBar element: bars) 
    { 
     element.draw(g); 
    } 
    //labeledBarsFrame.add(g); 
} 
+1

M-V-Cまたはモデルビューコントローラをルックアップして、この方法でプログラムを構成します。コンポーネント上で 'getGraphics()'を呼び出して取得したGraphicsオブジェクトを使用して描画しないでください。代わりに、JPanelのpaintComponentメソッド内に描画します。 Swing Graphicsチュートリアルを読むと、このことを推測することは、それを行う方法を学ぶ悪い方法です。 Swingチュートリアルへのリンクと他のSwingリソースへのリンクはここにあります:[Swing Info](http://stackoverflow.com/tags/swing/info) –

+0

問題が解決したら、あなたの質問のテキストを削除しないでください。問題を解決するのに役立つ回答を「受け入れる」ことで、人々は問題が解決されたことを知ることができます。 – camickr

+0

質問テキストがロールバックされました。スウェーガー、あなたの質問を否定してはいけない。このサイトは個人的なヘルプサイトではなく、一般的な質問とそこにある回答が掲載されており、すべての人が見ることができ、誰もが得ることができる質問/回答サイトです。あなたの質問を破ることによって、あなたはそれを将来の訪問者に完全に役に立たないようにします。 –

答えて

3

私はそのリストを反復処理し、これらのバーを保持する新しいパネルを作成します。私はこれらのバーをそのフレームにどのように描くのかを決めることはできません。

チェックアウトCustom Painting Approaches

DrawOnComponentの例は正しい方向に開始する必要があります。 ArrayListにあるカスタムオブジェクトをペイントする方法を示します。

基本的にはJPanelを作成し、ArrayListを反復処理し、あなたのオブジェクトのそれぞれにdraw(...)メソッドを呼び出すためにpaintComponent(...)をオーバーライドする必要があります。パネルがフレームに追加されます。

+0

答えを受け入れない理由は何ですか? – camickr

関連する問題