5

絶対レイアウトで JScrollPane を使用する必要があります。setLayout(null) の使用はまったくお勧めできません。JScrollPane で絶対レイアウトを使用する場合は、JScrollPane がそのサイズを計算できるように、内部の要素の優先サイズ プロパティを設定する必要があることを読んでいます。

要素の順序とサイズを変更する次のコードを試してみましたが、どこが間違っていたのかわかりません。

import java.awt.Color;
import java.awt.Dimension;
import java.awt.EventQueue;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;


public class frame extends JFrame {

private JPanel contentPane;
private JScrollPane scrollPane;

public static void main(String[] args) {
    EventQueue.invokeLater(new Runnable() {
        public void run() {
            try {
                frame frame = new frame();
                frame.setVisible(true);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    });
}

public frame() {
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setBounds(100, 100, 450, 300);
    contentPane = new JPanel();
    contentPane.setLayout(null);
    setContentPane(contentPane);

    JPanel panel = new JPanel();
    panel.setBackground(Color.red);
    panel.setBounds(0,0,600,600);
    panel.setPreferredSize(new Dimension(420,280));

    scrollPane = new JScrollPane(panel);
    scrollPane.setBounds(0, 0, 600, 600);
    scrollPane.setLayout(null);
    scrollPane.setBackground(Color.green);

    scrollPane.add(panel);
    scrollPane.setPreferredSize(new Dimension(450,300));
    contentPane.add(scrollPane);
}
}

setPreferredSize が正しく機能しないのはなぜですか? 前もって感謝します。

4

3 に答える 3

5

まず第一に、スクロールペインのレイアウトマネージャーを変更しないでください。達成したいことには必要ありません。

次に、スクロールペインは。を介して機能しますJViewport。代わりにコンテナを追加する必要があります(これscrollPane.add(panel)は間違っています)。代わりにscrollPane.setViewportView(panel)

第三に、スクロールペインはコンテンツの適切なサイズに依存するだけではないため、スクロール可能なインターフェイスを確認する必要があります

于 2012-08-16T21:43:18.153 に答える
4

実際のレイアウトマネージャーを変更してJScrollPaneも意味がありません。アプリケーション内で絶対レイアウトを使用する場合は、通常、絶対配置を使用して子コンポーネントをその中に配置するためにsetLayout(null)、コンテナークラス(など)を呼び出します。JPanel

私はあなたが試してみるべきであることを提案します:

  • (これがあなたがやろうとしていることだと思うsetLayout(null)ので)内にJPanel含まれているものを呼び出します。JScrollPane
  • 直接使用するのではなくJPanel、サブクラス化して、サブクラスにScrollableインターフェイスを実装させます。これによりJScrollPane、最適なスクロール可能なビューポートサイズに関する追加情報が提供されます。
于 2012-08-16T21:24:05.427 に答える