2014-10-11 107 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