gpt4 book ai didi

java - 绘画到彼此顶部的对象

转载 作者:行者123 更新时间:2023-12-04 05:03:02 24 4
gpt4 key购买 nike

我想在另一个椭圆上画一个椭圆。
这里我使用了一个select语句来绘制paint组件方法。

import java.awt.*;

public class test extends JPanel{

public static final int OVAL = 1;
public static final int SOLID = 2;

private int type = LINE;

public test(int type){

this.type = type;
}
public void piantComponent(Graphics g){
super.paintComponent(g);

switch(type)
{
case OVAL:
g.setColor(Color.YELLOW);
g.drawOval(0,0,150,150);
break;

case SOLID:
g.setColor(Color.BLUE);
g.fillOval(0,0,50,50);
break;

}
}


}

现在在我的主要方法中,我想在黄色椭圆形 (OVAL) 内显示一个纯蓝色椭圆形 (SOLID)。
  import...;
public class Main{
public static void main (String [] args){
JFrame window = new JFrame();
window.add(new test(test.OVAL));
window.add(new test(test.SOLID));
window.setSize(300,300);
window.setVisible(true);

}

}

这根本没有做我想要它做的事情。这只显示一个椭圆而不是一个椭圆和一个实体。我认为我正在重载窗口以仅显示椭圆形。我曾尝试使用布局管理器(gridlayout)进行显示,但这不会将两幅画相互重叠显示,而是将两幅画并排显示。

如何在不丢失 switch 语句的情况下解决此问题。

最佳答案

window.add(new test(test.OVAL));
window.add(new test(test.SOLID));

您的问题与 ZOrder 有关。为简化起见,Swing 以与面板上的组件相反的顺序绘制组件。所以在你的情况下,SOLID 在 OVAL 之前被涂上。由于 OVAL 的尺寸较大,因此它覆盖了 SOLID。

您可以通过执行以下操作强制 Swing 以更直观的顺序绘制组件:
window.add(0, new test(test.OVAL));
window.add(0, new test(test.SOLID));

现在添加的最后一个组件也将最后绘制。

然而,更好的设计是创建单独的 Oval 和 Solid 类,以便您可以独立指定大小、位置和颜色。然后,您可以根据需要向面板添加任意数量的组件。

关于java - 绘画到彼此顶部的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15880096/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com