web-dev-qa-db-ja.com

Java JScrollPane内のJPanel?

私はJFrameを持っています。このJFrameには、描画するJPanelがあります。このパネルは任意のサイズにすることができるので、JScrollpaneに配置して、パネルがウィンドウ画面のサイズよりも大きいときにスクロールできるようにします。

残念ながら、期待どおりに動作しません:

  1. JFrameウィンドウをJPanelサイズより小さくすると、スクロールバーが表示されません。

  2. JScrollPaneのサイズは、追加したJPanelのサイズにロックされているように見えます。以前のように、JFrameウィンドウの境界にサイズ変更されました(これはちょっとしたことですが、現在は垂直方向のみです!)。

  3. JPanelは、私が優先サイズに設定したものに関係なく、JScrollpaneのサイズを想定しているようです

私が最も感謝していることを誰かが指摘できれば、私は愚かなことをしていると確信しています!

JPanel _ImageCanvas = new JPanel(); // 'Canvas' to draw on
JScrollPane _ScrollPane = new JScrollPane();

// set size of 'canvas'
_ImageCanvas.setMinimumSize(new Dimension(100,100));

// Scroll pane smaller then the size of the canvas so we should get scroll bars right?
_ScrollPane.setMinimumSize(new Dimension(50,50)); 

// Add a border to 'canvas'
_ImageCanvas.setBorder(BorderFactory.createLineBorder(new Java.awt.Color(0, 0, 0)));

_ScrollPane.setViewportView(JPanel);

どうもありがとう

デビッド

16
FiniteRed

setPreferredSize()はトリックであり、コンポーネントのsetMinimumSize()とsetSize()さえもJScrollPaneによって無視されます。赤い枠を使用した実際の例を次に示します。

import Java.awt.*;

import javax.swing.*;

public class Scroller extends JFrame {

    public Scroller() throws HeadlessException {
        final JPanel panel = new JPanel();
        panel.setBorder(BorderFactory.createLineBorder(Color.red));
        panel.setPreferredSize(new Dimension(800, 600));

        final JScrollPane scroll = new JScrollPane(panel);

        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setLayout(new BorderLayout());
        add(scroll, BorderLayout.CENTER);
        setSize(300, 300);
        setVisible(true);
    }

    public static void main(final String[] args) throws Exception {
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                new Scroller().setVisible(true);
            }
        });
    }
}
14
Spyder
// suggest a size of 'canvas'
_ImageCanvas.setPreferredSize(new Dimension(100,100));

// Scroll pane smaller then the size of the canvas so we should get scroll bars right?
_ScrollPane.setPreferredSize(new Dimension(50,50)); 

// ..later 
_Frame.pack();
7
Andrew Thompson
  • キャンバスに適切なサイズを設定します。
  • ディメンション100、100を大きくすると、私のコンピューターでは少なくとも小さすぎます。
  • 新しいGridLayout(1,1);を使用することもできます。フレームを拡張するときにスクロールペインを拡張する場合は、JFrameを使用します。
1
Ashwinee K Jha

私が覚えている限り、2つのオプションがあります。

詳細については、Javadocを参照してください。 http://docs.Oracle.com/javase/7/docs/api/javax/swing/JScrollPane.html

0
Puce

Scrollableインターフェースを確認してください。これは、サイジングの問題に役立つ場合があります。

これらの2つの方法はおそらく役に立ちます:

boolean getScrollableTracksViewportWidth();

boolean getScrollableTracksViewportHeight();
0
cdc