2014-03-12 162 views
0

爲什麼JPanelpanGraphics不顯示在JScrollPane?但是,如果我把panGraphics直接在JTabbedPane,它的工作原理:tabbedPaneData.addTab("Chart View", panGraphics);爲什麼JPanel不顯示在JScrollPane上?

JTabbedPane tabbedPaneData = new JTabbedPane(); 
JScrollPane paneScrollPane = new JScrollPane(); 

JPanel panGraphics = createGraphics(); 

paneScrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS); 
paneScrollPane.setPreferredSize(new Dimension(550, 320)); 
paneScrollPane.setMinimumSize(new Dimension(10, 10)); 

paneScrollPane.add(panGraphics); 

tabbedPaneData.addTab("Chart View", paneScrollPane); 
tabbedPaneData.addTab("Table View", new JPanel()); 

回答

3

使用方法JScrollPane.setViewportView添加面板。因此,而不是:

paneScrollPane.add(panGraphics); 

使用:

paneScrollPane.setViewportView(panGraphics); 
0
Here is My collection sample code: 
----------------------------------- 
package testing; 

import java.awt.Color; 
import java.awt.Component; 
import java.awt.Dimension; 

import javax.swing.BorderFactory; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 
import javax.swing.JScrollPane; 

public class TestScroller extends JPanel 
{ 
    JPanel panel; 
    JScrollPane scrollPane; 

    public TestScroller() { 
     // TODO Auto-generated constructor stub 

//this is in the constructor of the mother object, JPanel 
    panel = new JPanel(); 
    panel.setBorder(BorderFactory.createEtchedBorder()); 
    //panel.setBounds(0,0,415,420); 

    panel.setPreferredSize(new Dimension(415,420)); 
    panel.setBackground(Color.BLACK); 

    scrollPane = new JScrollPane(panel); 
    scrollPane.setPreferredSize(new Dimension(415,400)); 
    add(scrollPane); 
    // add(scrollPane, 0, 40, 415, 400); 
    } 
/* //method add defined in the mother object 
     public void add(Component c, int x, int y, int sX, int sY) 
     { 
      add(c); 
      c.setBounds(x,y,sX,sY); 
     }*/ 




    public static void main(String args[]) 
    { 
     JPanel baseView = new TestScroller(); 
     baseView.setPreferredSize(new Dimension(500,500)); 
     baseView.setOpaque(false); 
     JFrame frame = new JFrame(); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.getContentPane().add(baseView); 
     frame.setSize(500,500); 

     frame.setVisible(true); 
     frame.repaint(); 
    } 
}