1

ボタンをクリックすると、パネルにボタンを 1 つ追加したいのですが、プログラムが以前のように動作しません。これは私の前のプログラムです:

ここに画像の説明を入力

ピンクのボタンが付いた南パネルはカードレイアウトパネルです。東の灰色のボタンをクリックすると、カードパネルが変わりました。ピンクのボタンをクリックすると、次のことが起こりました。

ここに画像の説明を入力

1 つのピンク色のボタン setText を 1 つのラベルに設定します。カードパネル「TOPLI NAPICI」にボタンを 1 つ追加すると、次のことが起こりました。

ここに画像の説明を入力

ご覧のとおり、1つのボタン「モカ」がパネルに追加されますが、1つのボタンをクリックすると、setTextが2回、新しいボタン(この場合は「MOKA」)のみsetTextが1回設定されます。これは、cardpanel の他のパネルでも発生しました。

ここに画像の説明を入力

これは、ボタンをクリックして新しいボタンを追加するときのコードの一部です

    if (enter == JOptionPane.OK_OPTION) {
    try{
    Double price1=Double.parseDouble(priceField.getText());

    String name1= productField.getText();


        Product name = new Product(name1, price1);
        Application .manu.add(name);


        if (field.getSelectedItem().equals("TOPLI  NAPICI")){

            for(Controller c:Controller) {
            c.tnp.add(new JButton(name1));//c is panel , holds all panels

         c.tn.revalidate();//c.tn is panel which is changed( adding one button), cardpanel
         c.removeAll();
         c.panels();//create all panels which is removed
             c.revalidate();


    System.out.print( c.tnp.size());//tnp is a list with buttons, shows that add one more button, that is correct

        }

click buttonパネルを複製したり、 2回クリックしたりしたときのように。出来ますか?また、cardlayout の 1 つのパネル (「TOPLI NAPICI」) だけを変更したのに、cardlayout のすべてのパネル (「SOKOVI」と「ALKOHOL」) で変更されました。

助けてくれてありがとう。

4

1 に答える 1

2
  • LayoutManager が使用されているかどうかはわかりません。CardLayout については何も話していません。SSCCE、短く、実行可能で、コンパイル可能で、CardLayout を使用した JPanel と、ここに投稿されたコード用の JButton について、SSCCE をすぐに投稿してください。

  • コードなしでここに投稿された画像は役に立たなかった

  • デフォルトでは、CardLayout は の呼び出しを必要としませんrevalidate() & repaint()。これらの通知機能はすべて、デフォルトで API に実装されています。

  • これは適切な方法ではありません

.

c.tn.revalidate();//c.tn is panel which is changed( adding one button), cardpanel
c.removeAll();
c.panels();//create all panels which is removed
c.revalidate();
  • すでに表示されている GUI にすべての変更を適用 (削除、追加、変更、再レイアウト) し、最後の 2 つのコード行を最初にrevalidate() & repaint(), にする必要があります。変更が行われたコンテナ、またはいくつかのコンテナが変更された場合は、最初に結合されたコンテナを呼び出します

  • validate() & repaint()forを使用するには Java7 までが必要ですJFrame, JDialog, , Java7 はforもJWindow実装されています,, for と同じ(例)revalidate()Top Level ContainersJPanel

于 2013-02-26T11:57:22.850 に答える