[英]how to add jlabel one below the other on jbutton click
我想在其他按鈕右下方單擊動態添加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();
}
}
});
}
}
在這里,我使用了框式布局,但是字段顯示在全屏上。 如
我應該如何在boxlayout中自定義調整大小的組件?
您可以為此目的使用GridBagLayout ,並且如果您不希望JLabel
分別以VERTICALLY or BOTH
方式調整大小,則可以將GridBagLayout的fill
屬性指定為HORIZONTAL or NONE
。 一個最簡單的示例可為您提供幫助:
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);
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.