2011-07-12 13 views
0

私はアプレットを作成していて、アプレットの一部として、これを実行します。ユーザが「OK」を押すと、古いコンポーネント(ラジオボタン)が削除され、新しいJPanelが追加されます数多くのテキストフィールドがあります。アプレットにコンポーネントを追加する

しかし、私はそれが開始された後にアプレットに新しいコンポーネントを追加する方法を見つけ出すことはできません。私は(私が行う方法を知っている)とだけではなく、シンプルなの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

は、コンポーネントを追加して、あなたのコンテナのvalidate()を呼び出します。この場合yourApplet.validate()。これにより、すべての要素の再描画と並べ替えがトリガーされます。

2

repaintメソッドをオーバーライドしてはいけません。このメソッドではコンポーネントを追加しないでください。 (removeメソッドを使用して)アプレットからラジオボタンを削除し、actionPerformedメソッドのアプレットにラベルを追加するだけです(initメソッドで追加する場合と同じです)。

その後validateに電話する必要があります。

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 
} 
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(); 
    } 
} 
0

ユーザが「OK」押下すると、古いコンポーネント(いくつかのラジオボタン)が除去され、新しいJPanelのは、テキストフィールドの束と、添加されます。

CardLayoutを使用してください(here)。このような状況には最適です。

Game viewHigh Scores view

関連する問題