java jlabel点击,我想通过单击添加按钮动态添加JLabel和文本框

When i create the text and label box dynamically it should sit in the format of "Textbox: Labelbox" then when i click on add button again the same pattern should repeat on next line and so on... Which layout should i use and how ?

This is the code i used

if(field_name.getText().equals("")){

error.setForeground(Color.red);

error.setText("Enter the Field name first");

} else {

JLabel l = new JLabel(field_name.getText(), JLabel.RIGHT);

JTextField textField = new JTextField();

Dimension dim = new Dimension(20,30);

textField.setPreferredSize(dim);

field_layer.add(l);

field_layer.add(textField);

SpringUtilities.makeCompactGrid(field_layer,

numPairs, 2, //rows, cols

6, 6, //initX, initY

6, 6); //xPad, yPad

numPairs++;

field_layer.invalidate();

this.pack();

}

解决方案

One option is GridBagLayout. In order to use this layout properly, you'll need to understand GridBagConstraints. Here's a tutorial to help you get started.

Here's a quick example:

import java.awt.Dimension;

import java.awt.GridBagConstraints;

import java.awt.GridBagLayout;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import java.util.ArrayList;

import java.util.List;

import javax.swing.JButton;

import javax.swing.JFrame;

import javax.swing.JLabel;

import javax.swing.JPanel;

import javax.swing.JTextField;

import javax.swing.border.LineBorder;

public class MyExample

{

// Field members

static JPanel panel = new JPanel();

static Integer indexer = 1;

static List listOfLabels = new ArrayList();

static List listOfTextFields = new ArrayList();

public static void main(String[] args)

{

// Construct frame

JFrame frame = new JFrame();

frame.setLayout(new GridBagLayout());

frame.setPreferredSize(new Dimension(300, 300));

frame.setTitle("My Example");

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

// Frame constraints

GridBagConstraints frameConstraints = new GridBagConstraints();

// Construct button

JButton addButton = new JButton("Add");

addButton.addActionListener(new ButtonListener());

// Add button to frame

frameConstraints.gridx = 0;

frameConstraints.gridy = 0;

frame.add(addButton, frameConstraints);

// Construct panel

panel.setPreferredSize(new Dimension(200, 200));

panel.setLayout(new GridBagLayout());

panel.setBorder(LineBorder.createBlackLineBorder());

// Add panel to frame

frameConstraints.gridx = 0;

frameConstraints.gridy = 1;

frameConstraints.weighty = 1;

frame.add(panel, frameConstraints);

// Pack frame

frame.pack();

// Make frame visible

frame.setVisible(true);

}

static class ButtonListener implements ActionListener

{

@Override

public void actionPerformed(ActionEvent arg0)

{

// Clear panel

panel.removeAll();

// Create label and text field

listOfTextFields.add(new JTextField());

listOfLabels.add(new JLabel("Label " + indexer));

// Create constraints

GridBagConstraints textFieldConstraints = new GridBagConstraints();

GridBagConstraints labelConstraints = new GridBagConstraints();

// Add labels and text fields

for(int i = 0; i < indexer; i++)

{

// Text field constraints

textFieldConstraints.gridx = 0;

textFieldConstraints.gridy = i;

// Label constraints

labelConstraints.gridx = 1;

labelConstraints.gridy = i;

// Add them to panel

panel.add(listOfTextFields.get(i), textFieldConstraints);

panel.add(listOfLabels.get(i), labelConstraints);

}

// Align components top-to-bottom

GridBagConstraints c = new GridBagConstraints();

c.gridx = 0;

c.gridy = indexer;

c.weighty = 1;

panel.add(new JLabel(), c);

// Increment indexer

indexer++;

}

}

}

Note: don't limit yourself to this particular layout manager. That is, you should explore other Layout Managers too.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值