2011-07-01 35 views
0

私は多少Javaの新機能を使いました。約1年前からプログラミングしていて、現在はユーザーがマップ(ワールドマップなど)を選択し、地図。私のdrawStringは機能しません

ユーザーが地図をクリックすると、名前を入力すると都市がその座標に描画され、その作業は正常です。私の問題は、街の名前を街の上に描いてもらいたいのですが、何らかの理由でそれを働かせることができません。 これは簡単な作業ですが、今は数時間試していて、非常に迷惑になり始めていますので、他の人がこの簡単な質問で私を助けてくれることを願っています。

コード:事前 で

public class Rita extends JComponent{ 
    private boolean klickad=false; 
    protected int xx=0; 
    private int yy=0; 
    public Rita(int x, int y){ 
     xx=x; 
     yy=y; 
     setBounds(x, y, 20, 20); 
     setPreferredSize(new Dimension(20,20)); 
     setMaximumSize(new Dimension(20,20)); 
     setMinimumSize(new Dimension(20,20)); 
    } 

protected void paintComponent(Graphics g){ 
    super.paintComponent(g); 
     drawString(g, xx+5, yy); 
     if(klickad==false) 
      klickadVal(g, xx, yy); 

     else if(klickad==true) 
      oKlickadVal(g); 
    } 
public void drawString(Graphics g, int x, int y){ 
    setFont(new Font("Courier New", Font.PLAIN, 16)); 
    g.setColor(Color.BLACK); 
    g.drawString("Test test test test test", x, y); 
} 

public void klickadVal(Graphics g, int x, int y){ 
    g.setColor(Color.RED); 
    g.fillRect(0,0,getWidth(),getHeight()); 
} 

public void oKlickadVal(Graphics g){ 
    g.setColor(Color.BLUE); 
    g.fillRect(0, 0, getWidth(),getHeight()); 

感謝/ジミー

+0

あなたが「うまく動作しない」と言うと、何かエラーが出るのですか? –

+0

どうしてうまくいかないのですか?メソッドは呼び出されていますか?文字列はまったく表示されていますか? – Patrick

+1

ちょっとしたヒント:if(klickad == false)... else if(klickad == true)... '(klickad == false)... else ...'またはもっと良い'if(!klickad)... else ...' - 'klickad'はtrueまたはfalseのどちらかにしかなりません:) – Thomas

答えて

0

それだから、あなたの描画座標のは、コンポーネントを基準に定義されなければなりません。 コンポーネントの境界をx,y,w,hに設定し、テキストを同じxyに描画しています。
x > wまたはy > hの場合は表示されません。

protected void paintComponent(Graphics g){ 
    super.paintComponent(g); 
     drawString(g, 5, 10); 
     if(klickad==false) 
      klickadVal(g, 0, 0); 

     else if(klickad==true) 
      oKlickadVal(g); 
} 

をそして、あなたの描画領域があるため、あなたの境界の幅と高さの、唯一の20ピクセル* 20ピクセルであることに注意してください。

は、描画コマンドのための相対座標を使用して、このようにコードを変更し

+0

それがうまくいきました。ありがとう!このメソッドを使用すると、文字列が四角形の内側に描画されます。 私は、xとyの座標を持つdrawStringメソッドと、四角形の上に描画するために数個のピクセルしか含まない別のオブジェクトが必要になると仮定します。 ありがとう –

0

文字列をペイントした後、klickadValまたはoKlickadValを呼び出しています。これらの2つのメソッドは、表示された文字列を上書きする単一の色でコンポーネント全体を塗りつぶします。

+0

drawRectを削除しようとしましたが、drawStringしか呼び出せませんでしたが、それが問題にならないように動作しませんでした。とにかくあなたの入力のおかげで –

関連する問題