gpt4 book ai didi

java - 将多个组件添加到 Jframe.getcontentpane()

转载 作者:行者123 更新时间:2023-11-29 08:12:07 27 4
gpt4 key购买 nike

我有一个扩展 JPanel 并绘制三角形的类。我从其他类(class)调用它来创建三个三角形,但是当绘制第三个三角形时,前两个三角形消失了。如何添加一起显示的多个三角形。代码如下:

三角形.Java:

public class Triangle extends JPanel{

Point p1, p2, p3;
public Triangle(Point _p1, Point _p2, Point _p3)
{
this.p1=_p1;
this.p2=_p2;
this.p3=_p3;
}

public void paint(Graphics g)
{
super.paint(g);
int[] xs = {p1.x,p2.x,p3.x};
int[] ys = {p1.y,p2.y,p3.y};
Polygon triangle = new Polygon(xs, ys, xs.length);
g.fillPolygon(triangle);
}

}

SwingApplication.java:

public class SwingApplication {

public static void main(String[] args) {
Triangle triangle1=new Triangle(new Point(120,10), new Point(170,110),new Point(220,10));
Triangle triangle2=new Triangle(new Point(120,210), new Point(170,110), new Point(220,210));
Triangle triangle3=new Triangle(new Point(10,400), new Point(170,210), new Point(320,400));
JFrame frame = new JFrame("Swing Application - Question 2");
//frame.setLayout(new FlowLayout());
frame.getContentPane().add(triangle1);
frame.getContentPane().add(triangle2);
frame.getContentPane().add(triangle3);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(400, 450);
//frame.pack();
frame.setVisible(true);
}

}

最佳答案

如果您想将它们全部绘制在一个位置上,那么就这样做——在同一个 JPanel 的 paintComponent 方法(不是 paint 方法)中绘制它们。一种方法是将 Triangle 类与 JPanel 类分开,为您的 Triangle 类提供 public void draw(Graphics g) 方法,为您的 JPanel 提供 3 个 Triangle 实例(或 Triangle 的 ArrayList),然后让 JPanel 的 paintComponent对其持有的所有 Triangle 对象调用 draw(Graphics g) 方法。

另一方面,如果您想在自己的 JPanel 中显示每个三角形,并让面板并排显示或一个在另一个下方显示(您的问题在这个问题上不清楚),那么您需要学习布局管理器教程,并使用这些知识将 contentPane 的布局设置为可以轻松显示多个 JPanel 的布局。当前,您正在将所有 Triangle/JPanel 添加到 contentPane,并且您会在教程中发现顶级容器(即 JFrame 的)contentPane 使用 BorderLayout 作为其默认布局管理器。如果您在没有指定位置的情况下将组件添加到使用 BorderLayout 的容器,它将落在 BorderLayout.CENTER 位置并将覆盖之前添加到那里的所有内容。

关于java - 将多个组件添加到 Jframe.getcontentpane(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7571818/

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