我正在创建一个applet,作为我的applet的一部分,我想要这样:当用户按下“OK”时,旧组件(一些单选按钮)被删除,并添加一个新的JPanel,一堆文本域。
但是,我无法弄清楚如何在applet启动后向applet添加新组件。我通过忽略删除部分(我知道该怎么做)而只是添加一个简单的JLabel来解决这个问题更简单,但即使这样也不会添加!
到目前为止,这是我的代码:
// imports omitted
public class Class extends Applet implements ActionListener
{
Button okButton;
CheckboxGroup radioGroup;
Checkbox radio1;
Checkbox radio2;
Checkbox radio3;
JLabel j;
public void init()
{
setLayout(new FlowLayout());
okButton = new Button("OK");
j = new JLabel("hello");
radioGroup = new CheckboxGroup();
radio1 = new Checkbox("Red", radioGroup,false);
radio2 = new Checkbox("Blue", radioGroup,true);
radio3 = new Checkbox("Green", radioGroup,false);
add(okButton);
add(radio1);
add(radio2);
add(radio3);
okButton.addActionListener(this);
}
public void repaint(Graphics g)
{
if (radio1.getState()) add(j);
}
public void actionPerformed(ActionEvent evt)
{
if (evt.getSource() == okButton) repaint();
}
}
我做错了什么?
答案 0 :(得分:2)
您不应该覆盖repaint
方法,当然也不能在此方法中添加组件。只需从applet中删除单选按钮(使用其remove
方法),然后在actionPerformed
方法的applet中添加标签,就像在init
方法中添加标签一样。
您可能需要在{。<}后调用validate
。
答案 1 :(得分:0)
添加组件,然后调用容器的validate()
。在这种情况下yourApplet.validate()
。这将触发重新绘制和重新排列所有元素。
答案 2 :(得分:0)
您可以执行类似
的操作JFrame fr= new JFrame(); // global variables
JPanel panelToBeAdded = new JPanel();
JPanel initialPanel = new JPanel();
JTextField fieldToBeAdded = new JTextField();
panelToBeAdded.setPreferredSize( new Dimension(400,400));
initialPanel.setPreferredSize( new Dimension(400,400));
initialPanel.setVisible(true);
fr.add(initialPanel);
fr.setVisible(true);
fr.pack();
public void actionPerformed(ActionEvent ae) {
initialPanel.setVisible(false);
//radiobuttons.setVisible(false);---> hide the radio buttons
panelToBeAddedd.add(fieldToBeAddedd);
panelToBeAddedd.setVisible(true);
fr.add(panelToBeAddedd);
}
public void repaint( Graphics g ) {
// do something
}
答案 3 :(得分:0)
我做错了什么?
您的repaint(Graphics)
方法与您在actionPerformed方法中调用的方法不同。
此外,对于添加新组件的方法,repaint
是一个非常糟糕的名称。
public void swapComponents()
{
if (radio1.getState()) {
remove(radio1);
remove(radio2);
remove(radio3);
add(j);
validate();
}
}
public void actionPerformed(ActionEvent evt)
{
if (evt.getSource() == okButton) {
swapComponents();
}
}
答案 4 :(得分:0)