2012-03-29 21 views
2

これは初心者の質問のようですが、私はSwingフレームワークの周りに自分の頭を包み込んでいます。Java Swingのミキシングペイン

dog.jpg、少なくとも500 px squareの画像を提供した場合、次のコードでは画像をスクロール区画に表示する必要があります。 何かと表示された場合、私はおそらく私の手を絶望に投げかけません。私は何が欠けていますか?

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

ありがとうございます!

+0

は、いつものように、私が使用することをお勧め[WindowBuilder Proは](https://developers.google.com/java-dev-tools/wbpro/quick_start) – Kai

+0

あなたのコードで明らかに間違っ何かを見つけることができません。 dog.jpgをプロジェクトのルートカタログに入れましたか? –

答えて

4

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

JLayeredPane layeredPane = new JLayeredPane() ; 

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

を追加し、あなたのウィンドウを最大化(またはあなたのJFrameのサイズは600×600に設定します)。 JPanelのデフォルトのレイアウトはFlowLayoutのあるHow to Use Layered Panes

+0

レイアウトマネージャは中間JPanel jpが必要な理由を発行していますか?私もそれを理解するためにしばらく時間をとった。 –

4
  • は上に読んでください。 FlowLayoutは、各コンポーネントをその好ましいサイズで と示し、5ピクセルの境界線を持ちます。代わりに BorderLayoutを使用します(または、スクロールペインにレイヤードペインを直接追加します)。

  • JLayeredPaneのデフォルトの推奨サイズは(0、0)です。それには の優先サイズを設定します。
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); 
    } 
} 
+0

public static void main(String [] args){ //イベントディスパッチスレッドのジョブをスケジュールします。 //このアプリケーションのGUIを作成して表示します。 新しいスクロールサンプル(タイトル、タイトル、 URL); } }); } –