2016-12-15 4 views
2

私は大学のプロジェクト用のGUIを作成していますが、どのようにしてJScrollPaneが動作するのか理解しようとしています。JPanelをスクロール可能にするには?

私は正常にスクロール可能な方法で写真を示す簡単なプログラムを書いている:

public class ScrollPaneTest{ 
    public static void main(String[] args){ 
     JFrame testFrame = new JFrame("ramka testowa"); 
     testFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

     JLabel picture = new JLabel(new ImageIcon("JavaSwingCompoentsList.PNG")); 
     JScrollPane scrollPane = new JScrollPane(picture); 

     testFrame.add(scrollPane, BorderLayout.CENTER); 
     testFrame.setSize(400, 400); 
     testFrame.setVisible(true); 
    } 
} 

私の最後のGUIで、私は、例えばその一部にJScrollPaneを適用したいと思います、が、シングルJPanel。私は残念ながら動作しないコードは、次の書かれているこのアイデアをテストするには:

public class ScrollPaneTest{ 
    public static void main(String[] args){ 
     JFrame testFrame = new JFrame("ramka testowa"); 
     testFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

     JLabel picture = new JLabel(new ImageIcon("JavaSwingCompoentsList.PNG")); 
     JScrollPane scrollPane = new JScrollPane(picture); 

     JPanel insidePanel = new JPanel(); 
     insidePanel.add(scrollPane); 
     testFrame.add(insidePanel, BorderLayout.CENTER); 

     testFrame.setSize(400, 400); 
     testFrame.setVisible(true); 

    } 
} 

を私は数多くのチュートリアルだけでなく、スタックとCodeRanchの記事を読んでいると私はまだどのようにJScrollPane仕事のアイデアを把握することができません。私の間違いは、JPanel-to-scrollの次元を指定することと関係があると思いますが、私が試したすべてのアプローチでスクロールバーも画像もありませんでした。

私にこの問題の正しい解決策を示すことができ、最も重要なことに、私が間違っていた箇所を教えていただければ、非常に感謝しています。

+0

Tearest jestem Polakiem :) –

答えて

3
  1. ないJScrollPane
  2. JScrollPaneJPanelを追加するには初期化JPanel、ん:

    scrollPane.setViewportView (panel) 
    
  3. ないJPanel

  4. JFrameから
2

JScrollPaneを追加もっとも単純な方法は、あなたのJPanelを作成したJScrollPaneを作成するときに、それを指定することです:

JPanel myPanel = ...; 
JScrollPane scroller = new JScrollPane(myPanel); 

それからちょうど(代わりにmyPanelを追加する)あなたのGUIにスクロールバーを追加します。

2

問題は、内側のパネルのデフォルトFlowLayoutから来ているようです。それを別のレイアウト(私はBordeLayoutを使用)に変更し、それは動作するはずです。言いましたが、私はなぜフローレイアウトが失敗するのか説明できません!

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

public class ScrollPaneTest { 

    public static void main(String[] args) { 
     JFrame testFrame = new JFrame("ramka testowa"); 
     testFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

     JLabel picture = new JLabel(new ImageIcon(
       new BufferedImage(370, 1200, BufferedImage.TYPE_INT_RGB))); 
     JScrollPane scrollPane = new JScrollPane(picture); 

     JPanel insidePanel = new JPanel(new BorderLayout()); 
     insidePanel.add(scrollPane); 
     testFrame.add(insidePanel, BorderLayout.CENTER); 

     insidePanel.add(new JLabel("Stay"), BorderLayout.LINE_START); 
     insidePanel.add(new JLabel("Stay"), BorderLayout.LINE_END); 
     insidePanel.add(new JLabel("Stay"), BorderLayout.PAGE_START); 
     insidePanel.add(new JLabel("Stay"), BorderLayout.PAGE_END); 

     testFrame.pack(); 

     testFrame.setSize(400, 400); 
     // failing to do this will end the main & the app. 
     // doing it will cause the EDT to start. 
     testFrame.setVisible(true); 
    } 
} 
関連する問題