2010-05-24 38 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的剩餘可用空間。