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

Другие вопросы по тегам