2011-07-01 53 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,但那不起作用,所以这不是问题。无论如何感谢您的意见 –