JPanelをスクロール可能にする方法は?スクロール可能なインターフェイスを実装しましたが、それを含むパネルに追加すると、
tabbedPane.add("Editor", new JScrollPane(storeyEditor = new MNScrollablePanel()));
何もうまくいきません
コード:
public class MNScrollablePanel extends JPanel implements Scrollable {
public Dimension getPreferredScrollableViewportSize() {
return getPreferredSize();
}
public int getScrollableBlockIncrement(Rectangle visibleRect, int orientation, int direction) {
return 10;
}
public boolean getScrollableTracksViewportHeight() {
return false;
}
public boolean getScrollableTracksViewportWidth() {
return false;
}
public int getScrollableUnitIncrement(Rectangle visibleRect, int orientation, int direction) {
return 10;
}
}
JScrollPane
を使用する必要があります。次にsetViewportview(Component)
を呼び出します。
スクロール可能を実装する必要はありません。JPanelはすでにスクロール可能です
それは私と一緒にこのように働きました...
JPanel test = new JPanel();
test.setPreferredSize(new Dimension( 2000,2000));
JScrollPane scrollFrame = new JScrollPane(test);
test.setAutoscrolls(true);
scrollFrame.setPreferredSize(new Dimension( 800,300));
this.add(scrollFrame);
他のすべての投稿で述べたように、Scrollableインターフェースを自分で実装する理由はありません。ただし、遊んでいるだけであれば、投稿された基本的なコードは妥当なように見えます。ただし、このコードの使用方法を示すデモプログラムを投稿していません。将来的には、SSCCEに質問を投稿してください。 SSCCEが何かわからない場合は、Webを検索してください。
考えられる問題の1つは、スクロールペインのビューポートに追加されたコンポーネントの「推奨サイズ」がスクロールペインのサイズより大きい場合に、スクロールバーが自動的に表示されることです。
したがって、パネルでカスタムペインティングを行う場合は、パネルの変更時にパネルの適切なサイズを設定する必要があります。コンポーネントとレイアウトマネージャーを備えたパネルを使用している場合、これについて心配する必要はありません。ただし、nullレイアウトマネージャーでコンポーネントを使用している場合は、問題も発生します。
パネルの使用状況を把握していないため、SSCCEが必要です。
JPanelはScrollableを実装していません。 Scrollableを実装し、より多くの機能を備えた SwingX からJXPanelを使用することをお勧めします。
私はあなたのための新しい解決策を持っています。
私はあなたがこのコードを使用する必要があると思います:
storyEditor = new JPanel();
storyEditor.setPreferredSize(new Dimension(..., ...)); // Insert Here your size for the editor
JScrollPane scroller = new JScrollPane(storyEditor);
tabbedPane.add("Editor", scroller));
frame.setSize(frame.getWidth()+1, frame.getHeight()); // frame is the JFrame where the tabbed pane is into
// Maybe you can replace "frame" with "this"
// You need to resize your frame. Why, I don't know...
frame.pack();
// Your original size will be restored by calling pack
これは私にとっての解決策でした。よろしくお願いします!