java 容器 快速删除,Java容器删除方法无法正常工作

i hava added 1.TextArea 2.TextField

then i start adding JButton successively on container...,now by using JRadioButton i want to remove JButton from container using this code

i=0;

k=0;

while(!birdButton[i].isSelected()){

i++;

}

System.out.println(i);

k=i+2;

list.removeElementAt(i);

listName.removeElementAt(i);

System.out.println(k);

c.getContentPane().remove(k);

but when i select the 1st radiobutton 1st JButton should be deleted because of k=i+2;

instead of deleting this one it deletes the TextArea(1st one).

when i select the 3rd radiobutton then 1st JButton is deleted. can anyone let me know what the problem is? and also System.out.println(i); System.out.println(k); is not printing any value....here is the code

public class RadioDemo implements ActionListener {

String buttonName;

JPanel radioPanel = new JPanel();

ButtonGroup group = new ButtonGroup();

Enumeration enl;

int result;

ActionEvent e;

JRadioButton birdButton[];

int i, k;

Vector listName;

Vector list;

Container c;

public RadioDemo(Vector listName,Vector list,Container c) {

birdButton=new JRadioButton[listName.size()];

this.listName=listName;

this.c=c;

this.list=list;

i = 0;

for (String buttonName : listName){

birdButton[i] = new JRadioButton(buttonName);

birdButton[i].setActionCommand(buttonName);

group.add(birdButton[i]);

birdButton[i].addActionListener(this);

radioPanel.add(birdButton[i]);

i++;

}

birdButton[0].setSelected(true);

radioPanel.setLayout(new BoxLayout

(radioPanel,BoxLayout.Y_AXIS));

//birdButton.setBorder

(BorderFactory.createEmptyBorder(5,5,5,5));

result = JOptionPane.showConfirmDialog(null, radioPanel, "Please choose", JOptionPane.OK_CANCEL_OPTION);

show();

}

/** Listens to the radio buttons. */

public void actionPerformed(ActionEvent e) {

this.e = e;

}

public void show() {

if (result == JOptionPane.OK_OPTION) {

i = 0;

k = 0;

while (!birdButton[i].isSelected()) {

i++;

}

System.out.println(i);

k = i + 2;

list.removeElementAt(i);

listName.removeElementAt(i);

System.out.println(k);

c.getContentPane().remove(k);

c.getContentPane().validate();

// System.out.println(e.getActionCommand());

// c.getContentPane().rePaint();

}

}

}

解决方案

The Container returned by getContentPane() is, by default, the contentPane of a JRootPane managed by the top-level container, JFrame. Although, "as a convenience, the add method and its variants, remove and setLayout have been overridden to forward to the contentPane as necessary," there's no a priori way to know about the frame's internal use of component indices.

c25cf03bc153ab3649f78907e3cd5198.gif

Instead, add on your own JComponent to the frame and operate on it; JPanel is a common choice.

Addendum: Also consider an alternative layout such as CardLayout, illustrated here.

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值