2013-08-31 3 views
1

jlabel을 동적으로 추가하려면 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를 사용하고 JLabel의 각각 VERTICALLY or BOTH 방법으로 크기를 조정하지 않으려면이 어느 HORIZONTAL or NONEfill 재산이다 지정할 수 있습니다. 당신의 도움에 대한 하나의 간단한 예 :

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/)로 질문을 편집하여 주제에 대해 더 자세히 설명해주십시오 :-) –

관련 문제