我的drawString不起作用

时间:2011-07-01 09:15:17

标签: java string object drawstring

我在java中有点新,已经编程了大约一年了,我目前正在开发一个项目,让用户选择一个地图(例如世界地图),并通过点击地图将城市添加到该地图。

当用户点击地图时,他/她输入一个名称,并在这些坐标上绘制城市,这项工作没问题。我的问题是我也想要在城市上方绘制城市的名称,但由于某种原因我不能让它工作。 这应该是一个简单的任务,但现在已经尝试了好几个小时,而且它开始变得非常烦人,所以我希望其他人可以帮我解决这个简单的问题。

代码:

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());

提前致谢 /麦

2 个答案:

答案 0 :(得分: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);
}

请注意,您的绘图区域仅为20px * 20px,因为您的边界宽度和高度。

答案 1 :(得分:0)

在绘制字符串后,您正在调用klickadVal或oKlickadVal。这两种方法用一种颜色填充整个组件,覆盖您显示的字符串。