1

うまくいきました!君たちありがとう!
コードは次のとおりです。BoxLayout質問を積み重ねるのに理想的だと思ったので使用しましたが、レイアウトに問題が発生しました...いくつかの問題を積み重ねると、質問パネルが重なり始めます。何かご意見は?

欲しかったもの...

            panels1 = new MultipleChoice[5];
    setLayout(new BoxLayout(this, BoxLayout.PAGE_AXIS));
    for(int i=0; i<4; i++){
        panels1[i]= new MultipleChoice();
        panels1[i].setAlignmentX(CENTER_ALIGNMENT);
        add(panels1[i]);


    }
    setVisible(true);

オンライン テスト アプレットの設計に取り組んでいます。
テストには、多肢選択問題と正誤問題があります。テストをセットアップするために、2 つのJPanelクラスを作成しました。1 つは複数選択問題用で、もう 1 つは正誤問題用です。したがって、テストが作成さJPanelれると、固定されていない質問の数に従って、これらのパネルをコンテナーに動的に追加するだけです。

まず、新しいパネルをパネルに動的に追加するにはどうすればよいですか? 型の配列を宣言することを考えましたJPanelforループを使用して、このパネル クラスのオブジェクトを作成し、追加しました。

MultitipleChoicePanel[] PanelArray;

for (...){
   PanelArray[i] =  new MultipleChoicePanel();
   containerpanel.add(PanelArray[i]);
   }

これが技術的に可能かどうかはわかりません。
Swing を使用するのはこれが初めてで、これを実行しようとしましたが、明らかにうまくいきませんでした。
これらのパネルを動的に追加する方法を知っている人はいますか?

次に、前のパネルのすぐ下に追加されたすべての新しいパネルに適合するために、コンテナ パネルに最適なレイアウト マネージャーはどれですか?
1 つの列を動的に設定し、GridLayoutパネルを追加するときに行を追加することを考えました。しかし、私はスイングを動的に変更するのに本当に苦労しています。
助言がありますか?

手伝ってくれてどうもありがとう!

4

4 に答える 4

5

JPanelデフォルトのレイアウトはFlowLayoutであり、デフォルトで各コンポーネントを右側に追加して、問題に適合するようにします。

彼らが持っているswingxにも興味があるかもしれませんHorizontalLayout

例:

//in some place
 JPanel myBigPanel = new JPanel();
 myBigPanel.setLayout(new HorizontalLayout()); // swingx api

List<MultitipleChoicePanel> panelList = new ArrayList<>();
// panelList.add(new MultipleChoicePanel()).. .n times

for(MultipleChoicePanel mp : panelList){
 myBigPanel.add(mp);
}

myBigPanel.revalidate(); // revalidate should call repaint but who knows
myBigPanel.repaint();

各種レイアウトマネージャーの使い方

于 2013-07-12T18:10:44.940 に答える
3

これらのパネルをどのように正しく動的に追加しますか?

可視 GUI にコンポーネントを追加した後、次のことを行う必要があります。

panel.add(...);
panel.revalidate();
panel.repaint();
于 2013-07-12T18:06:48.137 に答える
1

「そして、forループを使用してこのパネルクラスのオブジェクトを追加します:.....技術的に可能かどうかはわかりません」

パネルの配列に関しては、配列リストを使用して、あなたが行った方法と同様に行います。

import java.util.ArrayList;

ArrayList<MultipleChoicePanel> array = new ArrayList<MultipleChoicePanel>();
for(...){
     array.add(new MultipleChoicePanel());
     containerPanel.add(array.get(i));
}
于 2013-07-12T18:06:54.043 に答える
1
import java.awt.*;

import javax.swing.*;

public class JavaSwing extends JApplet {

public void init(){
    Container content = getContentPane();

    JScrollPane pane= new JScrollPane();
    JPanel panel = new JPanel();
    panel.setLayout(new BoxLayout(panel,BoxLayout.Y_AXIS));    

    panel.add(addPanel("title121"));
    panel.add(addPanel("title112"));
    panel.add(addPanel("title12"));
    panel.add(addPanel("title11"));
    pane.getViewport().add(panel);

    content.add(pane); 
}

public static JPanel addPanel(String title){
    JPanel panel = new JPanel();
    panel.add(new JButton(title));
    return panel;
}

}

于 2013-07-12T20:58:01.447 に答える