Моя 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 ответа
Это потому, что ваши чертежи координаты должны быть определены относительно компонента. Вы устанавливаете границы компонента на 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 из-за ширины и высоты ваших границ.
Вы вызываете klickadVal или oKlickadVal после того, как нарисовали строку. Эти два метода заполняют весь компонент одним цветом, перезаписывая отображаемую строку.