10

スクロール可能なパネル (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 内で機能するようにすることは良いステップです。

4

6 に答える 6

20

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
于 2012-05-29T14:30:03.933 に答える
6

@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);

    }
}
于 2012-05-29T14:48:02.467 に答える
6

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

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);
于 2015-09-30T18:02:34.117 に答える
2

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

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

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

于 2014-08-09T03:36:38.497 に答える
1

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

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

その結果、以前は表示されていなかったスクロールバーが原因で、私の (innerScrollPane と呼びましょう) が JFrame よりも大きくなりました。次に、outerScrollPane と呼ぶものをトリガーしてスクロールバーを表示し、内側のスクロールバーを覆い隠しました。

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

于 2015-04-24T00:21:16.877 に答える