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

标签 java swing jframe jpanel

我有一个扩展 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/

相关文章:

java - 尝试在 Hibernate 中保存多条记录时出错

java - 无法打开我在 eclipse 中保存的 java 程序

java - 调整大小是重新绘制 JFrame 的唯一方法。重绘();似乎不起作用

java - Swing 计时器不工作(Java)

java - 创建 JFrame 并向其中添加文本时遇到问题

java - 停止重复图标

java - 通过 HttpClient 接受所有 Cookie

java - Eclipse 插件 + TDD?

java - JPanel 上的 Graphics2D 并将 JPanel 添加到 JFrame

java - JTable,当光标仍指向单元格内部时无法检索特定单元格上的数据