拖放JLabel滚动错误

时间:2012-01-16 15:42:42

标签: java swing

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

基本上,面板由 2 JTables 组成,由 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 个答案:

答案 0 :(得分:1)

无法重现问题:下面的代码片段是你的稍微调整过的版本,上面的表是dragSource,下面的伪造是dropTarget。将面板添加到任何顶层窗口并调整其大小,以便只能看到下部窗口的一部分。然后在上部开始拖动并将鼠标移动到下部的最后一个可见行:整个面板向上滚动,直到释放鼠标。

默认情况下没有发生的事情(可能是感知到的问题,不知道你的描述)是滚动 dropTarget:对框架进行大小调整以使分隔符几乎不可见,启动拖动并移动到可见内容的下边界:不滚动,因为可见部分无论如何都不是有效的droplocation,因此内部自动滚动不会被触发。

    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);