2013-08-31 87 views
1

我想動態添加jlabel在按鈕上點擊右下方。我無法弄清楚爲了添加jlabel而使用的佈局。任何提示或解決方案可以理解如何在jbutton下面添加jlabel一個在另一個下面點擊

代碼放在這裏

package com.vastu; 

import javax.swing.JPanel; 

public class spanel extends JPanel { 

    String[] nakshatras = {"SELECT","Ashwini","Bharani","Kritika","Rohini","Mrugashira","Aardra","Punarvasu","Pushya","Aashlesha","Magha","Poorva","Phalguni","Uttara","Phalguni","Hasta","Chitra","Swati","Vishakha","Anuradha","Jyeshta","Moola","Poorvashada","Uttarashada","Shravana","Dhanishta","Shatabhisha","Poorvabhadra","Uttarabhadra","Revati"}; 
    String[] more={"MORE MEMBERS","FATHER","MOTHER","HUSBAND","WIFE","SON","DAUGHTER"}; 
    public spanel() { 
     setBackground(new Color(147, 112, 219)); 
     setLayout(new BoxLayout(this, BoxLayout.Y_AXIS)); 

     JLabel lblTarabala = new JLabel("tarabala:"); 
     add(lblTarabala); 

     JLabel lblStarOfOwner = new JLabel("STAR OF OWNER :"); 
     add(lblStarOfOwner); 

     JComboBox comboBox = new JComboBox(nakshatras); 
     add(comboBox); 

     JComboBox comboBox_1 = new JComboBox(more); 
     add(comboBox_1); 

     comboBox_1.addActionListener(new ActionListener() { 

      @Override 
      public void actionPerformed(ActionEvent e) { 
       // TODO Auto-generated method stub 
       JComboBox jc = (JComboBox) e.getSource(); 
       Integer i=jc.getSelectedIndex(); 
       if(i==0){ 
        repaint(); 
       }else if(i==1){ 
        JLabel newmember=new JLabel(); 
        JComboBox star_f=new JComboBox(nakshatras); 
        GridBagConstraints gbc_starf = new GridBagConstraints(); 
        star_f.setBackground(new Color(211, 211, 211)); 
        newmember.setFont(new Font("Times New Roman", Font.BOLD, 14)); 
        newmember.setText("STAR OF FATHER :"); 
        newmember.setBackground(new Color(147, 112, 219)); 
        gbc_starf.gridwidth=5; 
        add(newmember); 
        add(star_f); 
        revalidate(); 
       }else if(i==2){ 
        JLabel newmember=new JLabel(); 
        JComboBox star_m=new JComboBox(nakshatras); 
        GridBagConstraints gbc_starm = new GridBagConstraints(); 
        star_m.setBackground(new Color(211, 211, 211)); 
        newmember.setFont(new Font("Times New Roman", Font.BOLD, 14)); 
        newmember.setText("STAR OF MOTHER :"); 
        newmember.setBackground(new Color(147, 112, 219)); 
        gbc_starm.gridwidth=5; 
        add(newmember); 
        add(star_m); 
        revalidate(); 
       }else if(i==3){ 
        JLabel newmember=new JLabel(); 
        JComboBox star_h=new JComboBox(nakshatras); 
        GridBagConstraints gbc_starh = new GridBagConstraints(); 
        star_h.setBackground(new Color(211, 211, 211)); 
        newmember.setFont(new Font("Times New Roman", Font.BOLD, 14)); 
        newmember.setText("STAR OF HUSBAND :"); 
        newmember.setBackground(new Color(147, 112, 219)); 
        gbc_starh.gridwidth=5; 
        add(newmember); 
        add(star_h); 
        revalidate(); 
       } 

      } 
     }); 

    } 
} 

這裏我用箱佈局,但該領域出現全屏幕上。作爲 enter image description here


如何我應該在BoxLayout的自定義組件調整?

+2

您可以用'BoxLayout'但你應該提供關於你試了一下一些代碼,調用'重新驗證()'和'repaint'後添加組件,或'VerticalLayout的'如果你正在使用'swingx' – nachokk

回答

2

您可以使用GridBagLayout用於此目的,並指定這是fill財產要麼HORIZONTAL or NONE,如果你不希望JLabel s到分別調整VERTICALLY or BOTH方式。您的幫助一個簡單的例子:

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

public class DynamicComponentAddition { 

    private JFrame frame; 
    private JPanel compPanel; 
    private JLabel label; 
    private JButton button; 

    private GridBagConstraints gbc; 

    private int counter; 

    public DynamicComponentAddition() { 
     gbc = new GridBagConstraints(); 
     gbc.insets = new Insets(5, 5, 5, 5); 
     gbc.fill = GridBagConstraints.NONE; 
     gbc.anchor = GridBagConstraints.FIRST_LINE_START; 
     gbc.gridx = 0; 
     counter = 0; 
    } 

    private void displayGUI() { 
     frame = new JFrame("Dynamic component addition"); 
     frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); 

     JPanel contentPane = new JPanel(new BorderLayout(5, 5)); 

     compPanel = new JPanel(new GridBagLayout()); 
     button = new JButton("Add Component"); 
     button.addActionListener(new ActionListener() { 
      @Override 
      public void actionPerformed(ActionEvent ae) { 
       final JLabel label = new JLabel(
         Integer.toString(counter), JLabel.CENTER); 
       addComp(compPanel, label, counter++); 
      } 
     }); 

     contentPane.add(compPanel, BorderLayout.CENTER); 
     contentPane.add(button, BorderLayout.PAGE_END); 

     frame.setContentPane(contentPane); 
     frame.pack(); 
     frame.setLocationByPlatform(true); 
     frame.setVisible(true); 
    } 

    private void addComp(JPanel panel, JComponent comp, int gridy) { 
     gbc.gridy = gridy;  
     panel.add(comp, gbc); 
     frame.pack(); 
    } 

    public static void main(String[] args) { 
     Runnable runnable = new Runnable() { 
      @Override 
      public void run() { 
       new DynamicComponentAddition().displayGUI(); 
      } 
     }; 
     EventQueue.invokeLater(runnable); 
    } 
} 
+0

我同意這個答案,但是這增加了按鈕上方的數據。如何在按鈕下添加數據? – human

+0

@AhamBrahmaasmi:請簡單地將這一行'contentPane.add(button,BorderLayout.PAGE_END);'改成'contentPane.add(button,BorderLayout.PAGE_START);',這對我的例子來說是這樣的:-)雖然如果你仍然需要澄清,請使用有效的[SSCCE](http://sscce.org/)編輯您的問題,以便我能夠更輕鬆地闡明該主題:-) –

相關問題