在applet中添加组件

时间:2011-07-12 19:19:18

标签: java applet

我正在创建一个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();
  } 
}

我做错了什么?

5 个答案:

答案 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)

  

当用户按下“OK”时,将删除旧组件(某些单选按钮),并添加一个新的JPanel,其中包含一堆文本字段。

使用CardLayout,如图所示here。它非常适合这种情况。

Game view High Scores view