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

use*_*763 1 java swing jpanel jframe

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

Triangle.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);
    }

}
Run Code Online (Sandbox Code Playgroud)

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);
    }

}
Run Code Online (Sandbox Code Playgroud)

Hov*_*els 5

如果你想在一个地方全部绘制它们,那么这样做 - 在同一个JPanel的paintComponent方法(不是绘制方法)中绘制它们.一种方法是将Triangle类与JPanel类分开,为Triangle类提供一个公共的void draw(Graphics g)方法,给你的JPanel 3 Triangle实例(或Triangle的ArrayList),然后让JPanel的paintComponent方法在它所拥有的所有三角形对象上调用draw(Graphics g).

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

  • @ user906763你可能想看看[这里](http://download.oracle.com/javase/tutorial/uiswing/layout/index.html) (2认同)