1

「ページ」の配列リストを含むJFrameにlage JPanelがあります-JPanelを拡張するデータ型、デフォルトではJPanel「領域」、高さはその子の累積的なもの(デフォルトでは何もありません)、およびBOXを含みます。フィラー (優先される高さは「ページ」の全高です)。したがって、デフォルトでは、「ページ」全体がフィラーで満たされていますが、「エリア」に要素を追加すると減少します。

また、JPanels を含む配列リストがあります。それらは「領域」に向かう要素です。それらを追加すると、フィラーの高さがゼロになると、新しい「ページ」を作成し、最後の要素 (「境界外」になった) をその上に移動します。基本的に、MS Word と同じように動作するはずです。

今キャッチ。ユーザーは、ドキュメントのどの部分からでも、これらの要素を自由に追加および削除できます。問題は、「エリア」のランダムな場所に要素を追加するにはどうすればよいですか? 追加はおそらく別の要素にアタッチされたキーリスナーを呼び出すことで行われるため、どの 2 つの要素の間にランダムな要素が配置されているかがわかります。

これに使用できるレイアウトマネージャーはありますか、それとも別の方法で行う必要がありますか? どちら?

4

1 に答える 1

4

あなたの問題を正しく理解していれば、コンポーネントを追加するのではなく、特定の位置に挿入しようとしていますか?

それが問題である場合は、BoxLayout と Java の swing コンテナーの add(component, index) メソッドを使用することをお勧めします。もちろん、いくつかの子を次のページに移動し、次のページの子を再帰的にその次のページに移動する必要がある場合があります。

import javax.swing.BoxLayout;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;

public class AddAt {
    public static void main(String[] args) {
        JFrame frame = new JFrame();
        JPanel panel = new JPanel();
        panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS));
        JLabel one = new JLabel("one");
        JLabel two = new JLabel("two");
        JLabel between = new JLabel("between");

        frame.add(panel);
        panel.add(one);
        panel.add(two);
        panel.add(between, 1);

        frame.pack();
        frame.setVisible(true);
    }
}

結果: パネルを正しい順序で並べた JFrame

于 2012-08-26T16:46:30.370 に答える