我hava添加了1.TextArea 2.TextField 然后我开始在容器上连续添加JButton ...,现在通过使用JRadioButton我想使用此代码从容器中删除JButton
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);
但是当我选择第一个radiobutton时,由于k = i + 2,应该删除第一个JButton;
而不是删除这个删除TextArea(第一个)。
当我选择第3个radiobutton时,第1个JButton被删除。任何人都可以让我知道问题是什么?并且System.out.println(i);
System.out.println(k);
也没有打印任何值....这里是代码
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<String> listName;
Vector<JComponent> list;
Container c;
public RadioDemo(Vector<String> listName,Vector<JComponent> 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();
}
}
}
答案 0 :(得分:6)
Container
返回的getContentPane()
默认情况下是top-level container contentPane
管理的JRootPane
的{{1}}。虽然“为方便起见,JFrame
方法及其变体,add
和remove
已被覆盖以根据需要转发到setLayout
,但没有先验方式来了解框架内部使用组件索引的方法。
相反,您可以将自己的contentPane
添加到框架中并对其进行操作; JComponent
是一种常见的选择。
附录:另请考虑替代布局,例如JPanel
,图示为here。