Перетаскивание JLabel ошибка прокрутки - PullRequest
0 голосов
/ 16 января 2012

У меня есть ошибка в каком-то коде, которая, надеюсь, мне поможет.Итак, у меня есть панель перетаскивания, в которой верхняя часть панели - перетаскиваемая цель (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 Ответ

1 голос
/ 17 января 2012

Невозможно воспроизвести проблему: приведенный ниже фрагмент кода является слегка скорректированной вашей версией, верхняя таблица - 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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...