2

これは初心者の質問のように思えますが、私は長い間 Swing フレームワークに頭を悩ませてきました。

少なくとも 500 ピクセルの正方形の画像 dog.jpg を提供する場合、次のコードは画像をスクロールペインに表示する必要があります。それが何かを表示した場合、私はおそらく絶望して手を上げません。私は何が欠けていますか?

import java.awt.BorderLayout;
import javax.swing.*;

public class ScrollSample {
  public static void main(String args[]) {
    String title = (args.length == 0 ? "JScrollPane Sample" : args[0]);
    new ScrollSample( title ) ;
    }

  public ScrollSample ( String title) {
    JFrame frame = new JFrame(title);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    Icon icon = new ImageIcon("dog.jpg");
    JLabel dogLabel = new JLabel(icon);
    dogLabel.setSize( 500, 500 ) ;

    JLayeredPane layeredPane = new JLayeredPane() ;
    layeredPane.add( dogLabel, new Integer( 0 )) ;

    JPanel jp = new JPanel() ;
    jp.add( layeredPane ) ;
    jp.setSize( 500, 500 ) ;

    JScrollPane scrollPane = new JScrollPane();
    scrollPane.setViewportView(jp);

    frame.getContentPane().add( scrollPane, BorderLayout.CENTER);
    frame.setSize(300, 200);
    frame.setVisible(true);
  }
}

ありがとう!

4

3 に答える 3

4

JLayeredPaneより大きな幅とサイズのコンポーネントを描画する場合は、優先サイズを設定する必要があります。特に、デフォルトのレイアウトで JPanel に追加しているためです。JLayeredPanes にはデフォルトでレイアウト マネージャーがありません。そのため、境界を管理するか、優先レイアウト マネージャーをレイヤード ペインに追加します。簡単な方法は次のとおりです。

 JLayeredPane layeredPane = new JLayeredPane() ;

追加

 layeredPane.setPreferredSize(new Dimension(500,500));

そしてJFrame、アプリの実行時にウィンドウを最大化します (または のサイズを 600X600 に設定します)。

読んでください:レイヤードペインの使用方法

于 2012-03-29T14:23:02.060 に答える
4
  • JPanel のデフォルトのレイアウトは Flowlayout です。FlowLayout は、各コンポーネントを適切なサイズで表示し、5 ピクセルの境界線を持ちます。代わりに BorderLayout を使用します (または、階層化されたペインをスクロール ペインに直接追加します)。
  • JLayeredPane のデフォルトの優先サイズは (0, 0) です。好みのサイズを設定します。
于 2012-03-29T14:29:10.217 に答える
4

EDT で Swing GUI を開始する必要があります。ユーザーの演習として残します。

import java.awt.*;
import javax.swing.*;
import java.net.URL;

public class ScrollSample {

    public static void main(String args[]) throws Exception {
        final URL url = new URL("http://pscode.org/media/stromlo2.jpg");
        String title = (args.length == 0 ? "JScrollPane Sample" : args[0]);
        new ScrollSample( title, url ) ;
    }

    public ScrollSample ( String title, URL url) {
        JFrame frame = new JFrame(title);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        Icon icon = new ImageIcon(url);
        JLabel dogLabel = new JLabel(icon);
        dogLabel.setBounds(0,0,640,480);

        JLayeredPane layeredPane = new JLayeredPane() ;
        layeredPane.add( dogLabel, new Integer( 0 )) ;
        layeredPane.setPreferredSize( new Dimension(500, 500) ) ;

        JPanel jp = new JPanel(new BorderLayout()) ;
        jp.add( layeredPane ) ;

        JScrollPane scrollPane = new JScrollPane(jp);

        frame.getContentPane().add( scrollPane, BorderLayout.CENTER);
        frame.setSize(300, 200);
        frame.setVisible(true);
    }
}
于 2012-03-29T14:49:59.923 に答える