Java-从JPanel扩展而来,在内部添加了新面板

时间:2019-03-16 16:18:54

标签: java swing

我正在使用JPanel并试图在此JPanel内以编程方式创建两个新面板

public class MainWindow extends javax.swing.JFrame {

    /**
     * Creates new form MainWindow
     */
    private javax.swing.JPanel jviewer;

    public MainWindow() {
        initComponents();
        jviewer = new ImageRender(123);
    }
}

因此,我有下一个扩展名:

public class ImageRender extends JPanel {

    JPanel mainViewer = new JPanel();
    JPanel galleryViewer = new JPanel();

    public ImageRender(Integer itemnum) {


        setLayout(null);

        mainViewer = new JPanel();
        mainViewer.setBackground(Color.red);
        mainViewer.setBounds(0, 0, 200, 200);

        galleryViewer = new JPanel();
        galleryViewer.setBackground(Color.green);
        galleryViewer.setBounds(210, 0, 50, 200);

        this.add(mainViewer);
        add(galleryViewer);
        mainViewer.setVisible(true);
        setVisible(true);

        System.out.println("Se ha finalizado esta tarea");

    }

}

但是,这时,它不会显示在ImageRender.java中创建的任何JPanel,也不会显示任何错误。

有人对如何解决我的实现有想法吗?

1 个答案:

答案 0 :(得分:0)

这样做的原因是您创建了一个ImageRender实例,但从未将其添加到JFrame中。使用add方法可以达到目的。也不要使用setLayout(null)setBoundsUse a layout manager代替。组件将自动验证,此外您还有一个可调整大小的窗口。

事实ImageRender extends JPanel意味着ImageRender对象也是JPanel,因此可以将其添加到框架中。 (已在评论中提及)

看一个例子(假设ImageRenderer类在另一个文件中):

public class Test extends JFrame {
    public Test() {
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        setSize(400, 400);
        setLocationRelativeTo(null);
        getContentPane().setLayout(new BorderLayout());
        getContentPane().add(new ImageRenderer()); //Create and add a new ImageRendere panel
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(() -> new Test().setVisible(true));
    }

    private static class ImageRenderer extends JPanel {
        public ImageRenderer() {
            super(new GridLayout());

            JPanel leftPanel = new JPanel(new BorderLayout());
            leftPanel.setBackground(Color.green);
            add(leftPanel);

            JPanel rightPanel = new JPanel(new BorderLayout());
            rightPanel.setBackground(Color.blue);
            add(rightPanel);
        }
    }
}