2012-01-16 181 views
0

我在某些代码中存在一个错误,希望有人可以帮助我。所以我有一个拖放面板,其中面板的顶部是可拖动目标(JTable),底部是可用文件(JTable)的列表。如果列表中的文件数量超过一定数量,以至于用户必须滚动才能到达顶部(以及可拖动目标),如果他们尝试从列表底部拖动文件,则不允许用户滚动到目标区域。拖放JLabel滚动错误

基本上,面板是由2 JTable中的JLabel(只是一个粗黑线)分离。一旦用户到达这个JLabel,它不会再向上滚动。 有没有办法允许ScrollPanel在达到JLabel后继续滚动?

代码是字面上只是:

JPanel panel = new JPanel(new MigLayout("insets 0, wrap 1", "[grow]")); 
JPanel listsPanel = new JPanel(new MigLayout("insets 0, wrap 1","[grow]","[]0[5:5:5]0[]")); 
JLabel separatorLabel = new JLabel("_"); 

listsPanel.add(activeHouseStylesTable, "growx"); 

separatorLabel.setBorder(new LineBorder(Color.BLACK, 300)); 
separatorLabel.setAutoscrolls(true); 

listsPanel.add(separatorLabel, "growx"); 
listsPanel.add(inactiveHousestylesTable, "growx"); 
setupDragAndDrop(); 

panel.add(listsPanel, "growx"); 

感谢,

+1

当然 - 总是有:-)或换句话说:很可能是你没有显示的代码中出现错误。没有SSCCE就没有办法提供帮助。 – kleopatra 2012-01-16 16:19:15

+0

上面添加了代码... – maloney 2012-01-16 16:37:36

+0

这是代码,但不是SSCCE(谷歌如果你不知道这个词 - 或者看@Andrew Thompson的任何评论,他总是会提供一个链接:-) – kleopatra 2012-01-16 16:40:05

回答

1

不能重现该问题:下面的代码片段是你略作调整的版本,上面的表格是一个DragSource中,降低伪造成dropTarget。将面板添加到任何顶层窗口并调整大小,以便只有部分底部可见。然后在上部开始拖动并将鼠标移动到下部的最后一个可见行:整个面板向上滚动,直到释放鼠标。

什么并不是默认发生(和可能出现问题的,从你的描述也不认识)是任何滚动的DropTarget的:尺寸的框架,以使分离器几乎不可见,启动一拖移到可见内容的下边界:不滚动,因为无论如何,可见部分不是有效的放置位置,所以内部自动滚动没有被触发。

JPanel panel = new JPanel(new MigLayout("insets 0, wrap 1", "[grow]")); 
    JPanel listsPanel = new JPanel(new MigLayout("insets 0, wrap 1", 
      "[grow]", "[]0[5:5:5]0[]")); 
    JLabel separatorLabel = new JLabel("_"); 
    separatorLabel.setBorder(new LineBorder(Color.BLACK, 300)); 

    JTable upper = new JTable(20, 3); 
    JTable lower = new JTable(20, 3); 
    // enable drag in upper 
    upper.setDragEnabled(true); 
    TransferHandler tableTransfer = new TransferHandler() { 
     @Override 
     public boolean canImport(JComponent comp, 
       DataFlavor[] transferFlavors) { 
      return true; 
     } 
    }; 
    lower.setTransferHandler(tableTransfer); 

    listsPanel.add(upper, "growx"); 
    listsPanel.add(separatorLabel, "growx"); 
    listsPanel.add(lower, "growx"); 
    panel.add(listsPanel, "growx"); 
    JScrollPane pane = new JScrollPane(panel); 
+0

感谢您的答案,只是有点困惑。你是说让底部JTable不可见? – maloney 2012-01-17 10:55:40

+0

否 - 只是说_if_的目标(在这个例子中它是较低的)是在同一个scrollPane但不可见,_then_它不会滚动。无论如何,片段是为了跑步,所以继续,按照第一段中的描述,你会看到工作:-) – kleopatra 2012-01-17 11:01:50

+0

好吧,这样的问题,即时消息看到,我怎么能克服这一点?例如。 “不滚动,因为无论如何可见部分不是有效的放置位置,所以内部自动滚动没有被触发。” - 有没有工作? – maloney 2012-01-17 11:43:25