我已经尝试了add()方法,但是当我尝试将test添加到graphicstest时,没有显示任何内容。我该怎么加呢?有人能给我看看吗?我已经包含了我正在使用的代码。
这是我的方式,不起作用。有人能告诉我或者让我知道问题到底是什么吗?
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(); }
}
最佳答案
你的问题是g2d.dispose()。把那些拿出来,应该会有用的。我怀疑这可能会导致不同jvm上的不同行为。似乎正在发生的是g2d对象用于在graphicstest对象上绘制内容。然后,同一个g2d对象试图在测试对象上绘制内容,但它已被释放,因此无法绘制任何内容。有些情况下,您希望调用g2d.dispose(),但这不是其中之一。
我做的另一件事是改变了布局管理器:
setLayout(new BorderLayout());
add(t, BorderLayout.CENTER);
默认布局应为流布局。我不知道为什么它不能用流程布局。
关于java - 自定义JComponent中未显示自定义JComponent,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2440197/