كائنات رسومات متعددة
-
19-09-2019 - |
سؤال
لدي كائن رسومات من 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
الأساليب التي تغير مظهر المكون.
لا تنتمي إلى StackOverflow