2010-11-29 39 views
1

我的代码:的JPanel不会调整

public MyConstructor() { 
    view = new JPanel(new GridLayout(3, 1)); 
    header = new JPanel(new GridLayout(2, 1));//2 ROWS 1 COLUMN 
    foot = new JLabel("Copyright..."); 
    content = new JPanel(); 
    info = new JLabel(""); 
    logo = new JLabel() { 

     BufferedImage img; 

     @Override 
     public void paint(Graphics g) { 
      try { 
       img = ImageIO.read(new File("logo.jpg")); 
      } catch (IOException e) { 
      } 
      g.drawImage(img, 0, 0, null); 
     } 
    }; 
    window.add(view); 
    header.add(logo); 
    header.add(info); 
    view.add(header); 
    view.add(content); 
    view.add(foot); 
    window.setLocation(width/2, 100); 
    window.setSize(width, height); 
    window.setPreferredSize(new Dimension(width, height)); 
    content.setSize(window.getWidth(), height-70); 
    content.setPreferredSize(new Dimension(window.getWidth(), height-70)); 
} 

“窗口”的框架...类是不延长JFrame的 我的类将是一个超类给别人,子类继承公共内容JPanel。在我的超类中,我试图设置GridLayout的3个部分的宽度和高度,标识和信息组件为它们的高度加起来为70 ...我设置了其他组件(视图,标题,信息,标识),以便子类无法访问它们...

当应用程序运行时,显示登录窗口,这将显示并正确调整大小。一旦创建了其中一个子类的实例,则登录窗口将隐藏,然后隐藏站点setVisible(false)

当显示新窗口时,JFrame的大小正确,但页眉,内容和页脚是不是正确的尺寸。 我已经尝试设置每个组件的大小和首选大小,但仍然无法正常工作......我也尝试调用repaint并验证/重新验证

任何想法?

回答

1

这听起来像你的设计可以改进。为什么这些变量需要是超类的属性?为什么不只是有一个方法来构建你需要的面板和一个添加它们的构造函数,以便为每个实例获得新面板?

事实上,为什么不只是创建页眉和页脚类并重用它们,而不必为了获得相同的页眉和页脚而创建子类?

0

尝试在将组件添加到容器之前设置首选大小,然后添加组件“自下而上”。否则,请尝试拨打pack(),revalidate(),repaint()等来调整事情。

阅读Layout Manager时,也没有正确使用它们。

此外,摇摆吮吸。尝试Netbeans,它使它更容易受影响。当您需要手动放置和调整事物时,它也会有很大的帮助。

+1

不要使用IDE来生成GUI。学习如何自己编写代码,以便学习Java而不是IDE。 – camickr 2010-11-29 16:51:08

+0

除非你讨厌所有的Java,我也是如此,但出于某种原因,你只需要使用Swing:P – slezica 2010-11-29 18:15:37

1

为什么你重写标签来绘制图像?

  1. 那就是setIcon()来的方法是什么
  2. 你永远不应该阅读的风俗画代码的文件,因为该方法被调用多次
  3. 风俗画,在必要的时候,在做paintComponent()方法。