2011-07-01 56 views
0

我在java中有點新,已經編程了大約一年,現在我正在開發一個項目,讓用戶選擇一個地圖(例如世界地圖),並通過點擊地圖。我的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

當你說你「無法工作」,你是否得到任何錯誤或類似的東西? – 2011-07-01 09:20:49

+0

它不起作用?該方法是否被調用?字符串是否顯示? – Patrick

+1

只是一個提示:'if(klickad == false)... else if(klickad == true)...'最好是'if(klickad == false)... else ...'或者更好'if(!klickad)... else ...' - 'klickad'只能是true或者false :) – Thomas

回答

0

這是因爲你的繪圖座標應該定義相對於組件。 您正在將組件的邊界設置爲x,y,w,h,並將您的文本繪製到相同的xy
如果x > wy > 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

工作正常。謝啦!沒有意識到使用這種方法時,我的字符串將被繪製在矩形內。 假設我將需要另一個只包含drawString方法的對象,並使用我的x和y座標+幾個像素來將它繪製在矩形的頂部。 謝謝 –

0

在繪製字符串後,您正在調用klickadVal或oKlickadVal。這兩種方法用一種顏色覆蓋整個組件,覆蓋你所顯示的字符串。

+0

以前想過,所以試圖刪除drawRect並只調用drawString,但那不起作用,所以這不是問題。無論如何感謝您的意見 –