2013-12-13 28 views
0

我需要將JLabel對象添加到面板的特定組件。我使用setLabelFor方法,但是這個將標籤nex添加到組件。如何將其更改爲在組件頂部設置標籤?將JLabel放在組件上面

TextField sampleField = new TextField(); 
JLabel sampleLabel = new JLabel("sample text"); 
panel.add(sampleField); 
sampleLabel.setLabelFor(sampleField); 
panel.add(sampleLabel); 

^這個將sampleLabel放在sampleField的旁邊。如何把sampleLabel放在sampleField的頂部?

預先感謝。

@Edit:

我用的是這樣的:

public TabBody() 
{ 
    setLayout(new BorderLayout()); 
    nameField = new TextField(); 
    //nameField.setSize(new Dimension(200, 200)); 
    //revalidate(); 
    nameLabel = new JLabel("name test"); 
    amountLabel = new JLabel("amount test"); 
    amountField = new TextField(); 
    unitsBox = new JComboBox(units); 
    unitsBox.setSelectedIndex(3); 

    nameLabel.setLabelFor(nameField); 
    amountLabel.setLabelFor(amountField); 
    add(nameLabel, BorderLayout.NORTH); 
    add(amountLabel, BorderLayout.NORTH); 

    add(nameField); 
    add(amountField); 
    add(unitsBox); 
} 

和結果是:

enter image description here

我需要這樣的:

enter image description here

+1

這是由LayoutManager控制的,爲了更好地幫助更早地發佈SSCCE – mKorbel

+0

請參閱[JLayeredPane教程](http://docs.oracle.com/javase/tutorial/uiswing/components/layeredpane.html)瞭解一些想法 –

回答

1

JPanel使用FlowLayout默認情況下,這個地方組件一一一排。因爲你有這種效果。

您需要使用例如適當LayoutManager使用BorderLayout

import java.awt.BorderLayout; 
import java.awt.TextField; 

import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.JPanel; 

public class Example { 

    public static void main(String[] args){ 
     JFrame frame = new JFrame(); 

     JPanel panel = new JPanel(new BorderLayout()); 
     TextField sampleField = new TextField(); 
     JLabel sampleLabel = new JLabel("sample text"); 
     panel.add(sampleField); 
     sampleLabel.setLabelFor(sampleField); 
     panel.add(sampleLabel,BorderLayout.NORTH); 

     frame.add(panel); 
     frame.pack(); 
     frame.setLocationRelativeTo(null); 
     frame.setVisible(true); 
    } 

} 

enter image description here

如果你需要一個放置組件在網格中,一個例如嘗試使用GridBagLayout

JPanel panel = new JPanel(new GridBagLayout()); 
    JTextField sampleField = new JTextField(5); 
    GridBagConstraints c = new GridBagConstraints(); 
    c.anchor = GridBagConstraints.WEST; 
    c.gridx = 0; 
    c.gridy = 0; 
    c.insets = new Insets(5, 5, 5, 5); 

    JLabel sampleLabel = new JLabel("sample text"); 
    panel.add(sampleLabel,c); 

    c.gridy++; 
    panel.add(sampleField,c); 

    c.gridy++; 
    panel.add(new JLabel("sample text 2"),c); 

    c.gridy++; 
    panel.add(new JTextField(5),c); 

    c.gridy++; 
    panel.add(new JTextField(5),c); 

管理職位與gridxgridy本身領帶GridBagConstraints

enter image description here

0

您必須使用佈局來安排您的組件。對於JPanel deafult,它是FlowLayout,它將您的組件排列在一起。您可以使用GridLayoutGridBagLayout

下面是示例代碼:

TextField sampleField = new TextField(); 
JLabel sampleLabel = new JLabel("sample text"); 
panel.setLayout(new GridBagLayout()); 
sampleLabel.setLabelFor(sampleField); 
GridBagConstraints = new GridBagConstraints(0, 0, 1, 1, 1, 0, GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(0, 0, 0, 0), 0, 0); 
panel.add(sampleLabel, gbc); 
gbc.gridY=1; 
panel.add(sampleField, gbc); 
+0

當我將GridLayout設置爲2行(根據需要)時,它會在這兩行中隨機標籤nad組件,但我需要將標籤放在第一行,其他組件放在第二行。怎麼做? – mlethys

+0

你想要第一行的文字和第二行的文字? – Aditya

+0

我需要像alex2410發佈的東西,但它適用於面板包含一個標籤和一個其他組件。例如,當我放置3個組件和2個標籤來描述前2個組件時,它根本不起作用。 – mlethys

相關問題