我正在使用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,也不会显示任何错误。
有人对如何解决我的实现有想法吗?
答案 0 :(得分:0)
这样做的原因是您创建了一个ImageRender
实例,但从未将其添加到JFrame中。使用add
方法可以达到目的。也不要使用setLayout(null)
和setBounds
。 Use 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);
}
}
}