2015-10-07 55 views
0

我创建了两个面板和一个主面板。每个面板都包含一个非常大的图像,我希望它们都能够滚动查看图像的其余部分。但是,当我在主面板中添加两块面板并运行它时,第一块面板非常大以至于它覆盖了第二块面板。我将如何为两个面板实现ScrollPane?使用多个面板滚动窗格

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

public class BoardFrame extends JFrame { 

    JPanel mainPanel = new JPanel(new BorderLayout()); 

    JLabel jLabel = new JLabel(); 
    JPanel jPanelNorth = new JPanel(); 
    JScrollPane scrollPane = new JScrollPane(); 

    JLabel jLabel2 = new JLabel(); 
    JPanel jPanelSouth = new JPanel(); 
    JScrollPane scrollPane2 = new JScrollPane(); 

    public BoardFrame() { 
     jLabel.setIcon(new ImageIcon("an image here")); 
     jPanelNorth.add(jLabel); 

     jLabel2.setIcon(new ImageIcon("an image here")); 
     jPanelSouth.add(jLabel2); 

     mainPanel.add(jPanelNorth, BorderLayout.NORTH); 
     mainPanel.add(jPanelSouth, BorderLayout.SOUTH); 

     add(mainPanel); 


     //where would I use this? 
     //scrollPane.setViewportView(); 

    } 
} 

回答

2

每个面板包含一个非常大的图像>

//JPanel mainPanel = new JPanel(new BorderLayout()); 
JPanel mainPanel = new JPanel(new GridLayout(0, 1)); 

您可能需要使用一个网格布局,使每个滚动窗格中占据了一半的框架,从而显示尽可能多的每个图像。

//JScrollPane scrollPane = new JScrollPane(); 
JScrollPane scrollPane2 = new JScrollPane(jPanelNorth); 

使用滚动窗格中的最简单的方法是创建你想显示和滚动面板将组件添加到视你的组件滚动窗格。

//mainPanel.add(jPanelNorth, BorderLayout.NORTH); 
    mainPanel.add(scrollPane); // don't need the constraint when using GridLayout. 

然后添加滚动面板的主面板,因为滚动面板包含图像的面板。

+0

谢谢你洙多。这正是我想要做的!可以理解和正确的点!再次感谢 :)!! – Jake

0

似乎使用的网格布局比使用边框布局,在这种情况下要好得多:

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

public class BoardFrame extends JFrame { 
//1. use GridLayout with 2 rows and 1 column . 
JPanel mainPanel = new JPanel(new GridLayout(2,1)); 

JLabel jLabel = new JLabel(); 
JPanel jPanelNorth = new JPanel(); 
JScrollPane scrollPane = new JScrollPane(); 

JLabel jLabel2 = new JLabel(); 
JPanel jPanelSouth = new JPanel(); 
JScrollPane scrollPane2 = new JScrollPane(); 

public BoardFrame() { 
    jLabel.setIcon(new ImageIcon("an image here")); 
    jPanelNorth.add(jLabel); 

    jLabel2.setIcon(new ImageIcon("an image here")); 
    jPanelSouth.add(jLabel2); 


    //2.you should place .setViewportView() here : 
    scrollPane.setViewportView(jPanelNorth); 
    scrollPane2.setViewportView(jPanelSouth); 


    mainPanel.add(scrollPane);//is in the top ("North") 
    mainPanel.add(scrollPane2);//next ("South") 

    //3.use setContentPane instead of add() 
    setContentPane(mainPanel); 




} 
}