2014-10-11 154 views
0

不是滾動我有我創建像這樣的JPanel在JScrollPane中

JPanel statsKeysPanel = new JPanel(new MigLayout("insets 0", "[]", "")); 

,並堆積在彼此頂部的JLabel的動態數填充一個JPanel。舉一個例子的緣故:

for(int i = 0; i < 30; i++) { 
     statsKeysPanel.add(new JLabel("" + i + " key value"), "wrap"); 
    } 

我然後創建並添加滾動像這樣

JPanel panel = new JPanel(new MigLayout("insets 0", "[center][][center][]", "[][]")); 
    final JScrollPane keysScroller = new JScrollPane(this.statsKeysPanel, ScrollPaneConstants.VERTICAL_SCROLLBAR_NEVER, 
     ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER); 
    keysScroller.setMaximumSize(new Dimension(100, 300)); 
    panel.add(keysScroller, "cell 0 1"); 

應用300最大,但15出30周的JLabel不適合300像素被隱藏,並且滾動不起作用。我究竟做錯了什麼? (下圖)

enter image description here

+0

這很難說,你可以不使用[MCVE(http://stackoverflow.com/help/mcve)做錯了。你是以任何方式限制你的statsKeysPanel JPanel的大小嗎? – 2014-10-11 21:31:00

+0

nope-iive包括我與statsKeysPanel互動的每個地方 – mathematician 2014-10-11 21:34:44

+0

再次,考慮創建併發布您的[mcve](http://stackoverflow.com/help/mcve)。 – 2014-10-11 21:36:33

回答

2
final JScrollPane keysScroller = new JScrollPane(this.statsKeysPanel, ScrollPaneConstants.VERTICAL_SCROLLBAR_NEVER, 
     ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER); 

你爲什麼要使用NEVER用於水平和垂直滾動條?我認爲這會阻止滾動條出現。

我通常不會設置任何屬性,只是讓滾動窗格決定何時顯示滾動條。有時我使用ALWAYS爲滾動條保留空間。

+0

我已經試過總是 - 滾動條出現,但我仍然無法向下滾動 – mathematician 2014-10-11 23:02:38

0

您正在使用不必要的兩個面板;一個就足夠了。我認爲 你省略了導致錯誤的代碼。

這裏是一個工作示例:

package com.zetcode; 

import java.awt.Dimension; 
import java.awt.EventQueue; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.JPanel; 
import javax.swing.JScrollPane; 
import net.miginfocom.swing.MigLayout; 

public class StatsKeyEx extends JFrame { 

    public StatsKeyEx() { 

     initUI(); 
    } 

    private void initUI() { 

     JPanel pnl = new JPanel(new MigLayout()); 

     for (int i = 0; i < 60; i++) { 
      pnl.add(new JLabel("" + i + " key value"), "wrap"); 
     } 

     JScrollPane spane = new JScrollPane(pnl); 
     spane.setPreferredSize(new Dimension(150, 200)); 
     add(spane); 

     pack(); 

     setTitle("Scrolling"); 
     setLocationRelativeTo(null); 
     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    } 

    public static void main(String[] args) { 

     EventQueue.invokeLater(new Runnable() { 
      @Override 
      public void run() { 
       StatsKeyEx ex = new StatsKeyEx(); 
       ex.setVisible(true); 
      } 
     }); 
    } 
} 

根據需要滾動條被示出。

enter image description here