2011-04-24 60 views
1

對,我有一個JTabbedPane,它有一個包含JLabel和JTextField的JPanel。JTabbedPane JLabel,JTextField

我的代碼

JTabbed窗格聲明:

 this.tabPane = new JTabbedPane(); 
    this.tabPane.setSize(750, 50); 
    this.tabPane.setLocation(10, 10); 
     tabPane.setSize(750,450); 
    tabPane.add("ControlPanel",controlPanel); 

文本框聲明:

this.channelTxtFld = new JTextField(""); 
    this.channelTxtFld.setFont(this.indentedFont); 
    this.channelTxtFld.setSize(200, 30); 
    this.channelTxtFld.setLocation(200, 10); 

的JLabel: this.channelLabel =新的JLabel( 「頻道名稱:」); this.channelLabel.setSize(150,30); this.channelLabel.setLocation(10,10);

private void createPanels() { 
    controlPanel = new JPanel(); 
    controlPanel.setSize(650,500); 
} 
private void fillPanels() { 
    controlPanel.add(channelLabel); 
    controlPanel.add(channelTxtFld); 

} 

所以我的計劃是什麼,是有有一個JPanel,我有固定位置的一些標籤,文本框和按鈕的標籤面板,但是這樣做後,這是我的結果:

http://i.stack.imgur.com/vXa68.png

我想要的是我擁有JLabel並且在它旁邊是一個完全成長的JTextfield,位於左側而不是中間。

任何人都知道我的錯誤是什麼?

謝謝:)您使用的是您的ControlPanel控制什麼樣的佈局管理器的

回答

3

,你可能想的BorderLayout,把標籤在西方,並在中心的文本字段。

順便說一句,設置各種組件的大小和位置是沒有意義的,除非你使用的是空佈局,這不是一個好主意。所以我會刪除所有的東西,讓佈局管理器爲你做。

+0

我沒有使用佈局管理器,但我只有隨大流佈局,我不喜歡,我會嘗試的borderlayout經驗。如果您必須添加像16個標籤,文本框和按鈕,它也可以工作。我不想使用LayOutManager,但我想我必須:(我想自己在面板中定位它。謝謝你的答案,我會玩一下:) – 2011-04-24 23:31:28

+1

是的,你確實想使用佈局管理器,否則會給你帶來各種問題。如果你正在構建一個複雜的表單式對話框,那麼我建議使用jgoodies表單佈局。 http://www.jgoodies.com/freeware/forms/ – MeBigFatGuy 2011-04-24 23:37:40

3

使用一個LayoutManager,並考慮setPreferredSize,setMinimumSize,setMaximumSize方法來調整組件邊界,根據這些組件邊界是你想要的效果。

+0

'setPreferredSize()'方法通常比佈局管理器承擔更多的權重,但應該謹慎地調用。 – 2011-04-24 23:43:43

3

假設默認JPanel佈局,FlowLayout,得到JTextField非零數的columns,並給出了一個JLabel約束JLabel.LEFT

附錄:

一個充分的發展JTextField

像這樣的事情?

enter image description here

import java.awt.*; 
import javax.swing.*; 

/** 
* @see http://stackoverflow.com/questions/5773874 
*/ 
public class JTabbedText { 

    public static void main(String[] args) { 
     EventQueue.invokeLater(new Runnable() { 

      private final JTabbedPane jtp = new JTabbedPane(); 

      @Override 
      public void run() { 
       JFrame f = new JFrame(); 
       f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

       jtp.setPreferredSize(new Dimension(400, 200)); 
       jtp.addTab("Control", new MyPanel("Channel")); 

       f.add(jtp, BorderLayout.CENTER); 
       f.pack(); 
       f.setVisible(true); 
      } 
     }); 
    } 

    private static class MyPanel extends JPanel { 

     private final JLabel label = new JLabel("", JLabel.LEFT); 
     private final JTextField text = new JTextField(); 

     public MyPanel(String name) { 
      this.setLayout(new BoxLayout(this, BoxLayout.X_AXIS)); 
      label.setText(name); 
      label.setAlignmentY(JLabel.TOP_ALIGNMENT); 
      text.setAlignmentY(JTextField.TOP_ALIGNMENT); 
      this.add(label); 
      this.add(text); 
     } 
    } 
} 
+0

另請參閱此[答案](http://stackoverflow.com/a/11949899/230513)。 – trashgod 2012-08-14 10:01:51