2012-01-16 104 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