如何在jbutton click上添加一个jlabel

时间:2013-08-31 14:56:02

标签: java swing layout jlabel

我想在另一个下方的按钮上动态添加jlabel。我无法弄清楚要添加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中自定义调整大小组件?

1 个答案:

答案 0 :(得分:2)

您可以将GridBagLayout用于此目的,如果您不希望fill调整HORIZONTAL or NONE,则可以将JLabel属性指定为VERTICALLY or BOTHimport 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); } } 方式分别。一个最简单的例子供您使用:

{{1}}