2011-11-11 28 views
1

我有一個包含多個對象(自定義類擴展Jpanel)對象的JPanel。 JPanel具有7行1列的網格佈局。我試圖添加一個帶有7個對象的JPanel到另一個JScrollPane,所以我可以滾動查看所有的對象,但它做的很奇怪。無論JPanel中有多少個對象,滾動條都不會顯示出來。有任何想法嗎?提前致謝。Java ScrollPane/JPanel

import java.awt.BorderLayout; 
    import java.awt.Color; 
    import java.awt.Dimension; 
    import java.awt.GridLayout; 

    import javax.swing.BorderFactory; 
    import javax.swing.JFrame; 
    import javax.swing.JLabel; 
    import javax.swing.JPanel; 
    import javax.swing.JScrollBar; 
    import javax.swing.JScrollPane; 
    import javax.swing.ScrollPaneLayout;  

    public class Main { 
    @SuppressWarnings("deprecation") 
    public static void main(String[] args) { 
      JFrame frame = new JFrame("Test"); 
      frame.setLayout(new BorderLayout()); 

      JLabel title = new JLabel("Game", JLabel.CENTER); 
      title.setPreferredSize(new Dimension(60,60)); 
      title.setBorder(BorderFactory.createLineBorder(Color.black,5)); 
      frame.add(title,BorderLayout.NORTH); 

      frame.setSize(850,480); 
      frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

      Grid g = new Grid(); 

      JPanel jp = new JPanel(); 
      jp.setLayout(new GridLayout(1,3)); 
      jp.add(g); 

      JPanel test = new JPanel();   


      test.setLayout(new GridLayout(7,1)); 

      test.add(p1); 
      test.add(p2); 
      test.add(p3); 
      test.add(p4); 
      test.add(p5); 
      test.add(p6); 
      test.add(p7); 
      JScrollPane jsp = new JScrollPane(test); 
      jsp.setViewportView(test); 
      jsp.getVerticalScrollBar().setUnitIncrement(50); 
      jsp.setCorn 
      jsp.setVerticalScrollBarPolicy(22);    

      jp.add(jsp,BorderLayout.EAST);  

      frame.add(jp); 
      frame.setLocationRelativeTo(null); 
      frame.setVisible(true); 
      }  
     } 

回答

2

太平紳士的JPanel使用JPanel的默認FlowLayout中,這可能會阻止您調整您的JScrollPane中,看到,它實際上是正常工作。爲什麼不將JScrollPane添加到JFrame的contentPane或使jp使用BorderLayout?您也不需要設置JScrollPane的viewportView,因爲您已經通過將「test」傳入其構造函數來完成此操作。

+0

我無法將JScrollPane添加到ContentPane,因爲我不想在使用ScrollPane時移動另一個JPanel。此外,ScrollPane可能正在工作,但我需要將添加的對象垂直堆疊在彼此之上。感謝您的視口幫助。想法? –

+0

如果視口視圖大於滾動窗格的視口,則會顯示滾動條。 –

+0

我試着添加更多的對象來使條出現,但它不會顯示 –

1

你的代碼不能編譯。請看下面的代碼。它可以垂直和水平滾動。

import java.awt.BorderLayout; 
import java.awt.Color; 
import java.awt.Dimension; 
import java.awt.GridLayout; 

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

class MyPanel extends JPanel { 
    MyPanel(Color c) { 
     setBackground(c); 
    } 
} 

public class Test { 
    public static void main(String[] args) { 
     JPanel panel = new JPanel(); 
     // the size of this panel is larger than the frame 
     panel.setPreferredSize(new Dimension(500, 2000)); 
     panel.setLayout(new GridLayout(7, 1)); 
     // add 7 sub panels 
     panel.add(new MyPanel(Color.magenta)); 
     panel.add(new MyPanel(Color.cyan)); 
     panel.add(new MyPanel(Color.blue)); 
     panel.add(new MyPanel(Color.green)); 
     panel.add(new MyPanel(Color.yellow)); 
     panel.add(new MyPanel(Color.orange)); 
     panel.add(new MyPanel(Color.red)); 

     JScrollPane scroll = new JScrollPane(panel); 
     scroll.setViewportView(panel); 
     scroll.getVerticalScrollBar().setUnitIncrement(50); 

     JFrame frame = new JFrame("Test"); 
     frame.setSize(400, 400); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.add(scroll); 
     frame.setVisible(true); 
    } 
} 
+0

你真棒.......真棒.....我的代碼現在完美工作....我的代碼正在編譯.....但我犯的錯誤是我只用了一個面板添加我所有的組件到框架.....謝謝你...的幫助。 –

+0

現在,我該如何將mouselistener添加到滾動窗格中的每個組件中? –

+0

代替'panel.add(new MyPanel(Color.magenta));',你寫了'MyPanel mp = new MyPanel(Color.magenta); mp.addMouseListener(...); panel.add(MP);' – wannik