0

私は Java の初心者で、約 1 年間プログラミングをしており、現在、ユーザーがマップ (たとえば、世界地図) を選択し、マップをクリックしてそのマップに都市を追加できるようにするプロジェクトに取り組んでいます。

ユーザーが地図をクリックして名前を入力すると、その座標に都市が描画されます。これで問題ありません。私の問題は、都市の名前も都市の上に描画したいということですが、何らかの理由で機能させることができません。簡単な作業のはずですが、数時間試してみたところ、非常に面倒になり始めているので、他の誰かがこの簡単な質問で私を助けてくれることを願っています.

コード:

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テキストを同じxおよびに描画していますy。またはの
場合、表示されません。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 を呼び出しています。これら 2 つのメソッドは、表示した文字列を上書きする単一の色でコンポーネント全体を塗りつぶします。

于 2011-07-01T09:33:36.383 に答える