Java 在内部框架中绘制多个形状(JPanel)
我正在用Java实现一个演示绘画应用程序。我现在可以画一个单一的形状。当我再次尝试绘画时,先前的形状消失了,出现了一个新的形状。 我将JPanel嵌入到带有BorderLayut.CENTER的内部框架上 请帮助我如何在此内部框架中绘制多个形状Java 在内部框架中绘制多个形状(JPanel),java,swing,Java,Swing,我正在用Java实现一个演示绘画应用程序。我现在可以画一个单一的形状。当我再次尝试绘画时,先前的形状消失了,出现了一个新的形状。 我将JPanel嵌入到带有BorderLayut.CENTER的内部框架上 请帮助我如何在此内部框架中绘制多个形状 public class InternalFrame extends JInternalFrame{ public InternalFrame(String string, boolean b, boolean c, boolean d
public class InternalFrame extends JInternalFrame{
public InternalFrame(String string, boolean b, boolean c, boolean d,
boolean e) {
super(string,b,c,d);
MyShape myShape2 = new MyRectangle();
add(myShape2, BorderLayout.NORTH);
MyShape myShape1 = new MyCircle();
add(myShape1, BorderLayout.SOUTH);
}
}
public class MyRectangle extends MyShape {
public void paintComponent(Graphics g) {
super.paintComponent(g);
int temp = 0;
System.out.println("rect");
// draw circle
g.setColor(Color.RED);
g.fillRect(startX, startY, endX - startX, endY - startY);
g.setColor(Color.GREEN);
g.drawRect(startX, startY, endX - startX, endY - startY);
}
}
public abstract class MyShape extends JPanel {
protected int startX;
protected int startY;
protected int endX;
protected int endY;
MyShape(){
addMouseListener(new MouseAdapter() {
public void mousePressed(MouseEvent event) {
// To initialisise the starting and ending point
setStart(0,0);
setEnd(0,0);
// To set starting point
setStart(event.getX(), event.getY());
}
// handle mouse release event
public void mouseReleased(MouseEvent event) {
setEnd(event.getX(),event.getY());
}
});
}
public void setStart(int x, int y) {
startX = x;
startY = y;
repaint();
}
public void setEnd(int x, int y){
endX = x;
endY = y;
repaint();
}
}
Swing中的绘制是破坏性的,也就是说,每次调用
paintComponent
,您都需要从头开始重新绘制整个componet状态
最好的解决方案是生成一个列表
的形状
s或绘制命令,每次都可以根据需要调用/绘制/填充这些命令
调用paintComponent
有关更多详细信息和想法,请参见显示了两种常见的方法。您使用的方法取决于您的确切要求
编辑:
可能有更多信息/想法可以帮助您。请展示您的代码,这将大大提高您获得答案的机会。没有代码,我们只能推测。谢谢。这很有帮助。我现在为每个新形状创建新对象。但我对布局问题很感兴趣。使用下面的代码,我可以在北部绘制矩形,在南部绘制圆形。有什么办法可以解决这个问题吗?这取决于你想达到什么目的?