سؤال

لدي كائن رسومات من JPanel وهذا يعمل بشكل جيد:

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;

    @Override
    public void paintComponent(Graphics g)
    {
        super.paintComponent(g);
        g2d = (Graphics2D) g;
        g2d.setClip(0, 0, getWidth(), getHeight());

        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);
        Test t = new Test();
        super.add(t);

        repaint();
    }

    public void setState(String state) { this.state = state; }
    public String getState() { return state; }

    public void setX(int x) { this.x = x; }
    public void setY(int y) { this.y = y; }
}

كنت تجرؤ مع مكون رسومات جديد وعند إنشاء إجراء اختبار جديد وإضافته في الرسوم البيانية لا يحدث شيء. ما الذي أفعله خطأ؟

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

public class Test extends JComponent
{
    private Graphics2D g2d;
    private String state;
    private int x, y;

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

        g2d.setColor(Color.GREEN);
        g2d.fill(new Rectangle2D.Double(60, 60,
                10, 10));

        repaint();
    }

    public void setState(String state) { this.state = state; }
    public String getState() { return state; }

    public void setX(int x) { this.x = x; }
    public void setY(int y) { this.y = y; }

}

شكرا!

هل كانت مفيدة؟

المحلول

يجب عليك إضافة مكون اختبار مرة واحدة فقط وتعيين تخطيط:

public GraphicTest()
{
    super();
    setLayout(new BorderLayout());
    add(new Test(),BorderLayout.CENTER);
}

أيضا، لا تنقذ Graphics2D الكائنات لأنها ستكون غير صالحة مرة واحدة paintComponent انتهى ولا تتصل repaint في داخل paintComponent. وبعد استخدم أجهزة ضبط الوقت إذا كنت بحاجة إلى الرسوم المتحركة والاتصال repaint في setXXX الأساليب التي تغير مظهر المكون.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top