我在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());
提前致谢 /麦
答案 0 :(得分:0)
这是因为您的绘图坐标应该相对于组件定义。
您将组件的边界设置为x,y,w,h
,并将文本绘制为相同的x
和y
。
如果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);
}
请注意,您的绘图区域仅为20px * 20px,因为您的边界宽度和高度。
答案 1 :(得分:0)
在绘制字符串后,您正在调用klickadVal或oKlickadVal。这两种方法用一种颜色填充整个组件,覆盖您显示的字符串。