web-dev-qa-db-ja.com

JFrameをJavaでスクロール可能にする方法は?

私はこのコードで、スクロール可能なパネル(JPanel)に適合させようとしていますが、取得できません。これが私のコードです:

public class Sniffer_GUI extends JFrame {
Canvas c = new Canvas();
ConnectorPropertiesPanel props;
public Sniffer_GUI() {
    super("JConnector demo");
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    getContentPane().setLayout(new GridBagLayout());
    init();

    getContentPane().add(new JLabel("Connectors example. You can drag the connected component to see how the line will be changed"),
                         new GridBagConstraints(0, 0, 2, 1, 1, 0, GridBagConstraints.NORTHWEST, GridBagConstraints.HORIZONTAL, new Insets(5, 5, 0, 5), 0, 0));
    getContentPane().add(initConnectors(),
                         new GridBagConstraints(0, 1, 1, 1, 1, 1, GridBagConstraints.NORTHWEST, GridBagConstraints.BOTH, new Insets(5, 5, 5, 5), 0, 0));
    getContentPane().add(props,
                         new GridBagConstraints(1, 1, 1, 1, 0, 1, GridBagConstraints.NORTHWEST, GridBagConstraints.VERTICAL, new Insets(5, 0, 5, 5), 0, 0));
    setSize(800, 600);
    setLocationRelativeTo(null);

}

前もって感謝します。

部分的に動作するように見えるコードを追加するために編集します...

public Sniffer_GUI() {
    super("JConnector demo");
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    JPanel container = new JPanel();
    JScrollPane scrPane = new JScrollPane(container);
    add(scrPane);
    scrPane.setLayout(new ScrollPaneLayout());
    init();

    add(initConnectors());

    setSize(800, 600);
    setLocationRelativeTo(null);

}

しかし、それはまだスクロール可能ではありません。少なくともJScrollPane内でその機能を実行することは、良いステップです。

9
Joe Lewis

JPanelをスクロール可能にして、次のようなコンテナーとして使用します。

JPanel container = new JPanel();
JScrollPane scrPane = new JScrollPane(container);
add(scrPane); // similar to getContentPane().add(scrPane);
// Now, you can add whatever you want to the container
19
Eng.Fouad

@ Eng.Fouadの回答を拡張するには:

public class Sniffer_GUI extends JFrame {
    Canvas c = new Canvas();
    ConnectorPropertiesPanel props;
    public Sniffer_GUI() {
        super("JConnector demo");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        JPanel container = new JPanel();
        JScrollPane scrPane = new JScrollPane(container);
        getContentPane().add(scrPane);
        container.setLayout(new GridBagLayout());
        init();

        container.add(new JLabel("Connectors example. You can drag the connected component to see how the line will be changed"),
                             new GridBagConstraints(0, 0, 2, 1, 1, 0, GridBagConstraints.NORTHWEST, GridBagConstraints.HORIZONTAL, new Insets(5, 5, 0, 5), 0, 0));
        container.add(initConnectors(),
                             new GridBagConstraints(0, 1, 1, 1, 1, 1, GridBagConstraints.NORTHWEST, GridBagConstraints.BOTH, new Insets(5, 5, 5, 5), 0, 0));
        container .add(props,
                             new GridBagConstraints(1, 1, 1, 1, 0, 1, GridBagConstraints.NORTHWEST, GridBagConstraints.VERTICAL, new Insets(5, 0, 5, 5), 0, 0));
        setSize(800, 600);
        setLocationRelativeTo(null);

    }
}
6
Guillaume Polet

多分これは役立つでしょう...

JFrame frame = new JFrame();
JPanel panel = new JPanel();

// add something to you panel...
// panel.add(...);

// add the panel to a JScrollPane
JScrollPane jScrollPane = new JScrollPane(panel);
// only a configuration to the jScrollPane...
jScrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
jScrollPane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);

// Then, add the jScrollPane to your frame
frame.getContentPane().add(jScrollPane);
6
Filipe Brito

JFrameのコンポーネントをスクロール可能にするには、コンポーネントをJScrollPaneでラップします。

    JScrollPane myJScrollPane = new JScrollPane(myJLabel,
         JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,
         JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);

myJLabelの言及をmyJScrollPaneに置き換えます。私のために働いた。

2
gherson

ただ手を入れて、私がベースから外れている場合は自由に修正してください。しかし、そのようなJScrollPaneを使用すると、より頻繁にウィンドウのサイズ変更を要求するという意図しない結果が生じます。

たとえば、私はそのようなJFrame全体のスクロールペインを設定するプログラムを持っていました。また、コンテンツペインと同じサイズのフレームのタブにJTextAreaがありました。このtextAreaも独自のスクロールペインにありました(これは何よりも、プロジェクトをめちゃくちゃにしていたものです)。ファイルからコンテンツをロードしてtextAreaに配置すると、テキスト領域の周りのスクロールバーがトリガーされました。

その結果、スクロールバーが以前は表示されていなかったため、innerScrollPaneと呼ぶことにしましたが、JFrameよりも大きくなりました。これにより、今度はouterScrollPaneと呼ぶものをトリガーして、そのスクロールバーを表示し、それによって内側のスクロールバーを覆い隠しました。

これは、ファイルを開くメソッドの最後にwindow.pack()引数を追加することで簡単に解決できましたが、これをそこに捨てたかっただけです。注意しないと、スクロールバーがウィンドウのコンテンツを覆い隠す可能性があります。しかし...この問題を防ぐ方法は100万通りあるので、それほど大きな問題ではありません。注意すべきことだけです。

1
user2223059

これを試して:

JScrollPane sp = new JScrollPane();
this.add(sp).
sp.add( *GUI elements for your applications.*)

そのようなものがうまくいくはずです。 this も見てください:

0
Logard