2012-02-17 4 views
3

を表示しません。 Javaの1.6Javaのグラフィックスは、私は非常に多くの新しいこのプログラミング事に、小さなJavaアプレット上で働いているの変更

を使用して、私は、複数のチェックボックスのJPanelを作成するクラスを持っています。目標は、ユーザーがオプションのいくつかの固定数を選択することです、その後、他の方法にそれらのオプションを渡す

public class OptionSelector extends JPanel { 

private JCheckBox[] optionCheckBoxes; 
private int numberSelected; 
private int goalNumber; 
private ArrayList<String> selectedOptions = new ArrayList<String>(); 
private boolean rightAmountSelected; 
private boolean isFinalChoice = false; 
private DoneButton done = new DoneButton(); 

/** 
* This method is used only for the purposes of initialization 
* 
*/ 
public OptionSelector() 
{ 
    this(1, "test", "test"); 
} 

public OptionSelector(int howManyToSelect, String ... options) 
{ 
    super(new FlowLayout()); 
    JCheckBox option; 
    optionCheckBoxes = new JCheckBox[options.length]; 
    for (int i = 0; i < options.length; i++) 
    { 
     option = new JCheckBox(options[i]); 
     optionCheckBoxes[i] = option; 
     add(option); 
    } 
    add(done); 
    numberSelected = 0; 
    goalNumber = howManyToSelect; 
    rightAmountSelected = false; 
} 

public void setOptions(String ... options) 
{ 
    this.removeAll(); 
    JCheckBox option; 
    optionCheckBoxes = new JCheckBox[options.length]; 
    for (int i = 0; i < options.length; i++) 
    { 
     option = new JCheckBox(options[i]); 
     optionCheckBoxes[i] = option; 
     add(option); 
     System.out.println(option.getBounds()); 
    } 
    add(done); 
    System.out.println(done.getBounds()); 
} 

public void paintComponent(Graphics g) 
{ 
    g.clearRect(0,0,this.getWidth(), this.getHeight()); 
    for (int i = 0; i < getComponentCount(); i++) 
    { 
     System.out.println(this.getComponents()[i].getBounds()); 
    } 
} 

私はそれをテストするために使用されるアプレットは

public class TestDisplay extends JApplet implements MouseListener{ 

OptionSelector s = new OptionSelector(); 

public void init() 
{ 
    setSize(640,480); 
    this.getContentPane().setLayout(null); 
    addMouseListener(this); 
    s.setBounds(10,10,200,200); 
    add(s); 
    s.repaint(); 
} 

public void paint(Graphics g) 
{ 
    s.repaint(); 
} 

public void mouseClicked(MouseEvent arg0) 
{ 
    s.setOptions("1","2"); 
    repaint(); 
} 

public void mousePressed(MouseEvent arg0) { 
    // TODO Auto-generated method stub 

} 

public void mouseReleased(MouseEvent arg0) { 
    // TODO Auto-generated method stub 

} 

public void mouseEntered(MouseEvent arg0) { 
    // TODO Auto-generated method stub 

} 

public void mouseExited(MouseEvent arg0) { 
    // TODO Auto-generated method stub 

} 

} 

の下に問題がときということです私はアプレットをテストします。マウスをクリックするだけでオプションが変わりますが、新しいJCheckBoxesは表示されません。セレクタ内の各コンポーネントの境界を印刷することを試してみると、ボタンの境界は変更されていないが、JCheckBoxの境界はまだ(0,0,0,0)でスタックされていることがわかります。私はOptionSelectorとアプレット全体を何度も再ペイントしようとしましたが、何も動作していないようです。どのようにこれを修正するための任意のアイデア?

答えて

5

あなたは成分を除去し、追加するとき、あなたのJPanelのコンテナにrevalidate()を呼び出すために忘れているように見える:

public void mouseClicked(MouseEvent arg0) { 
    s.setOptions("1", "2"); 
    s.revalidate(); 
    repaint(); 
} 

あなたは、コンテナ(あなたのJPanelのは)適切にコンテナに新しいコンポーネントをレイアウトしたい場合、これが不可欠です。また、これを行うのは良いことではありません。

public void paint(Graphics g) { 
    s.repaint(); 
} 

あなたが正当な理由なく、スーパーメソッドを呼び出すことなく、トップレベルのコンポーネントのpaintメソッドをオーバーライドしているよう。ちょうどその方法を取り除く。

+0

ありがとうございました。問題は解決しました。 – Titandrake

+0

あなたがチャンスを取ったときの答えを[承諾](http://meta.stackexchange.com/a/65088/155831)してください。 –

関連する問題