2012-11-14 70 views
0

我已经在这里呆了好几个小时了,而且我很难过。我有这个代码,它在JFrame中添加了一个JPanel,问题是当我将Frame设置为Free Design时,它不会显示在Frame中。当我将帧设置为Border Layout时,代码工作正常。我想要做的就是让它与Free Design一起工作,我可以根据需要放置和调整JPanel的大小。以下是将它放入Frame中的代码。把JPanel放在JFrame里面

 canvas = new Canvas(); 
     canvas.setVisible(true); 
     canvas.setImage(file); 
     GroupLayout canvasLayout = new GroupLayout(canvas); 
     canvas.setLayout(canvasLayout); 
     canvas.setPreferredSize(new Dimension(100, 100)); 
     //canvas.setSize(200,200); 
     //canvas.setPreferredSize(null); 
     add(canvas); 
     revalidate(); 

当我使用免费设计模式时,我错过了什么?下面是构建布局代码:

private void initComponents() { 

    jInternalFrame1 = new javax.swing.JInternalFrame(); 

    jInternalFrame1.setVisible(true); 

    javax.swing.GroupLayout jInternalFrame1Layout = new javax.swing.GroupLayout(jInternalFrame1.getContentPane()); 
    jInternalFrame1.getContentPane().setLayout(jInternalFrame1Layout); 
    jInternalFrame1Layout.setHorizontalGroup(
     jInternalFrame1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
     .addGap(0, 0, Short.MAX_VALUE) 
    ); 
    jInternalFrame1Layout.setVerticalGroup(
     jInternalFrame1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
     .addGap(0, 0, Short.MAX_VALUE) 
    ); 

    setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); 
    setTitle("PocketShop"); 
    setName("main"); 

    pack(); 
} 
+0

您需要为组布局管理器提供约束条件,以便知道组件布局的位置和方式。看看[如何使用GroupLayout](http://docs.oracle.com/javase/tutorial/uiswing/layout/group.html) - 注意,“GroupLayout”旨在被表单设计师使用, t代表手工编码;) – MadProgrammer

回答

1

用的JInternalFrame

JInternalFrame处于一个JDesktopPane的内孩子做掉。窗口中的种类窗口,即所谓的MDI,多文档界面,而不是SDI,单文档界面。

使用的JPanel,而不是帆布

Canvas是旧机平台AWT,组件的Swing的JPanel,一个JComponent的。 你可以在那里重写paintComponent。

对于免费设计版式,我将使用NetBeans IDE中的GUI编辑器。我这样做,所以不能帮助你进一步。

如果可能,请勿使用重新验证。


如果手动添加的画布,尝试加入一个JPanel,并设置为自定义创建代码new Canvas()canvas

+0

画布是我的自定义类,它扩展了JPanel。代码的第二部分是由我的编辑使用Netbeans GUI Builder构建的,它不会让我改变它。 –

+0

为什么不使用revalidate()? –

+0

在这种情况下,它看起来还在构建GUI,然后重新验证至少是多余的。不幸的是,JInternalFrame不是错误。 JInternalFrame在JDesktopPane中添加了一些不规则:容易出错。我会补充答案。 –