0

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

提前致谢/吉米

4

2 回答 2

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。

于 2011-07-01T09:32:15.980 回答
0

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

于 2011-07-01T09:33:36.383 回答