3

add()メソッドを試しましたが、GraphicsTestにTestを追加しようとすると何も表示されません。どのように追加すればよいですか?誰か見せてもらえますか?使用しているコードを含めました。

これは私のやり方であり、機能していません。誰かが私に見せたり、問題が実際に何であるかを私に知らせてもらえますか?

import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import javax.swing.JComponent;

public class Test extends JComponent
{
    @Override
    public void paintComponent(Graphics g)
    {
        super.paintComponent(g);
        Graphics2D g2d = (Graphics2D) g.create();
        g2d.setColor(Color.red);
        g2d.drawString("Hello", 50, 50);
        g2d.dispose();
    }
}

他のクラスは次のとおりです。

   import java.awt.Color;
   import java.awt.Graphics;
   import java.awt.Graphics2D;
   import java.awt.geom.Rectangle2D;
   import javax.swing.JPanel;

   public class GraphicsTest extends JPanel
   {
       private Graphics2D g2d;
       private String state;
       private int x, y;

   GraphicsTest()
   {
       Test t = new Test();
       t.setVisible(true);
       add(t);
   }

   @Override
   public void paintComponent(Graphics g)
   {
       super.paintComponent(g);
       g2d = (Graphics2D) g;

       g2d.setColor(Color.BLACK);
       g2d.drawString("STATE: " + state, 5, 15);
       g2d.drawString("Mouse Position: " + x + ", " + y, 5, 30);

       g2d.setColor(Color.red);
       Rectangle2D r2d = new Rectangle2D.Double(x, y, 10, 10);
       g2d.draw(r2d);

       g2d.dispose();
    }

    public void setState(String state) { this.state = state; }
    public String getState() { return state; }
    public void setX(int x) { this.x = x; repaint(); }
    public void setY(int y) { this.y = y; repaint(); }
}
4

1 に答える 1

1

あなたの問題はg2d.dispose()です。それらを取り出して、それはうまくいくはずです。これにより、異なるjvmで異なる動作が発生する可能性があると思います。何が起こっているのかは、g2dオブジェクトがGraphicsTestオブジェクトに何かを描画するために使用されているようです。次に、同じg2dオブジェクトがTestオブジェクトに何かを描画しようとしますが、何も描画できないように破棄されています。g2d.dispose()を呼び出したい場合がありますが、これはその1つではありません。

コードを機能させるために私が行ったもう1つのことは、レイアウトマネージャーを変更したことです。

setLayout(new BorderLayout());
add(t, BorderLayout.CENTER);

デフォルトのレイアウトはフローレイアウトである必要があります。フローレイアウトで機能しない理由がわかりません。

于 2010-03-13T23:17:05.510 に答える