我正在制作一个小程序,作为我的小程序的一部分,我希望发生这样的事情:当用户按下"OK“时,旧的组件(一些单选按钮)将被删除,并添加一个新的JPanel,其中包含一堆文本字段。
但是,我不知道如何在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();
}
}我做错了什么?
发布于 2011-07-13 03:25:14
您不应该覆盖repaint方法,当然也不应该在此方法中添加组件。只需从小程序中删除单选按钮(使用其remove方法),并将标签添加到actionPerformed方法中的小程序中,与在init方法中添加它们的方式相同。
之后,您可能需要调用validate。
发布于 2011-07-13 03:22:06
添加组件,然后调用容器的validate()。在本例中为yourApplet.validate()。这将触发所有元素的重新绘制和重新排列。
发布于 2011-07-13 12:39:33
你可以像那样做
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
} https://stackoverflow.com/questions/6669802
复制相似问题