0

Swing コンポーネントのサイズ変更時の動作を適切に設定するのに苦労しています。

そのインターフェースには2つの問題があります。 期待される

A: 各行の先頭にあるトグル ボタンは、テキストを折りたたむ/展開するためのものです。すべての要素は JLayeredPane に含まれています。ボタンをクリックすると、ペインの高さを編集してコンテンツを展開または折りたたむ (31 または 310)。Expand正常に動作し、以下の要素をプッシュします。一方、collapseテキストを非表示にしますが、すべての要素を所定の位置に残します。これが私のコードです:

private void expandText(java.awt.event.ActionEvent evt) {
    JToggleButton button = (JToggleButton) evt.getSource();
    Container parent = button.getParent();
    Dimension size = parent.getSize();
    String icon;

    if (button.isSelected()) {
        size.height = 310;
        icon = "/org/cytoscape/ocsana/resources/images/minus.png";
    } else {
        size.height = 31;
        icon = "/org/cytoscape/ocsana/resources/images/plus.png";
    }

    parent.setSize(size);
    try {
        button.setIcon(new ImageIcon(ImageIO.read(getClass().getResource(icon)).getScaledInstance(-1, 15, Image.SCALE_SMOOTH)));
    } catch (IOException ex) {
    }

    backgroundPane.revalidate();
    backgroundPane.repaint();
}

B: 上のスクリーンショットはウィンドウの最小サイズです。ウィンドウを水平方向にサイズ変更すると、内側のペインはmin + (frame.width - min) / 2、右スクロールバーがフレームの右側にくっつかないことを意味する値にのみサイズ変更されます。

以下の両方の問題のデモンストレーションを参照してください。 結果

4

3 に答える 3

0

展開/折りたたみコードはどのように機能しますか? コンポーネントを表示/非表示にするだけですか、それともパネルからコンポーネントを追加して削除しますか?

一方、折りたたみはテキストを非表示にしますが、すべての要素を所定の位置に残します。

コンポーネントを追加/削除する場合、基本的なコードは次のとおりです。

panel.remove(...);
panel.add(...);
panel.revalidate();
panel.repaint();

つまり、右のスクロールバーがフレームの右側にくっつきません。

使用しているレイアウト マネージャーによって異なります。最も簡単なのは GrigBagLayout を使用することだと思います。利用可能なスペースを「埋める」ことができます。詳細と例については、GridBagLayout の使用方法に関する Swing チュートリアルのセクションを参照してください。

すべての要素は JLayeredPane に含まれています。

階層化されたペインを使用している理由がわかりません。デフォルトでは、レイヤード ペインはレイアウト マネージャーを使用しません。

于 2014-04-23T16:49:01.897 に答える