2010-05-24 37 views
1

我需要一个包含一个面板的小程序。该面板需要550x400像素,JTextField需要在面板动态大小下。我希望它是这样的: [topPanel] [textPanel]Applet面板,一个固定大小和动态JTextField

但是我正在尝试这个,它看起来像面板填满了所有的空间。代码:

import java.awt.BorderLayout; 
import java.awt.Color; 
import java.awt.Dimension; 
import javax.swing.JApplet; 
import javax.swing.JPanel; 
import javax.swing.JTextField; 

public class Client extends JApplet 
{ 

@Override 
public void init() 
{ 
    try { 
     java.awt.EventQueue.invokeAndWait(new Runnable() 
      { 

      public void run() 
      { 
       initComponents(); 
      } 
      }); 
    } catch (Exception ex) { 
     ex.printStackTrace(); 
    } 
} 

private void initComponents() 
{ 
    JPanel topPanel = new javax.swing.JPanel(); 

    topPanel.setBackground(Color.red); 

    topPanel.setSize(550, 400); 
    topPanel.setPreferredSize(new Dimension(550, 400)); 
    topPanel.setMinimumSize(new Dimension(550, 400)); 
    topPanel.setMaximumSize(new Dimension(550, 400)); 

    JTextField myTextBox = new JTextField(255); 

    getContentPane().add(topPanel, java.awt.BorderLayout.NORTH); 
    getContentPane().add(myTextBox, java.awt.BorderLayout.SOUTH); 
} 
// TODO overwrite start(), stop() and destroy() methods 
} 

谢谢!

回答

1

当我测试上述代码时,组件似乎处于正确的位置。我唯一注意到的是,初始视图 - 端口大小小于550x400。由于JPanel的大小总是为550x400,因此在显示JTextField时会产生一些工件。

0

JPanel似乎是正确的(使用setPreferredSize,增加到北)假设你的小程序是550宽和至少400高。我可能会尝试将文本字段移动到CENTER而不是SOUTH,因为BorderLayout如何拉伸其组件。根据Javadocs:

这些组件根据它们的首选尺寸和容器的尺寸限制进行布置。 NORTH和SOUTH组件可能水平拉伸; EAST和WEST组件可能会被垂直拉伸; CENTER组件可以水平和垂直拉伸以填充剩下的空间。

因此,将文本字段放入中心应该给它垂直伸展,使其能够占用该applet的剩余可用空间。