java - 拖放 JLabel 滚动错误

标签 java swing

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

基本上,该面板由 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");

谢谢

最佳答案

无法重现该问题:下面的代码片段是您的代码片段的稍微调整版本,上面的表格是一个 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);

关于java - 拖放 JLabel 滚动错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8882371/

相关文章:

java - 如何将SIGINT传递给用java创建的进程?

java - 在另一个组件内绘制组件

java - 从 Firebase 检索数据时出现 NullPointerException

java进程和输入流

java - 从 JTable 读取输入

java - 如果 Object 是可变的并且不会在排序的 Set 等中使用,compareTo 和 equals 是否应该一致

java - 有没有办法强制 JTree 中的节点必须是唯一的,最好不要编写 TreeModel 的实现?

java - 为什么/何时调用 ComponentListener.componentShown()?

java - JPanel 不显示图形

java - 当用户输入数据/删除文本时,在 TextField 中显示/消失默认文本