3

リスト内のアイテムをドラッグして並べ替えることができる JList を作成しようとしています。自動スクロールの動作が非常にぎくしゃくして不安定であることを除けば、これは正常に機能しています。リスト内のアイテムをつかんでリストの一番下にドラッグすると、スムーズかつ連続的にスクロールすることを期待していますが、実際には数ピクセルスクロールして停止します。JList の端でマウス カーソルを揺らすと、一度に数ピクセルずつスクロールし続けますが、明らかにこれは許容できる動作ではありません。

これを修正する方法について誰か提案がありますか?

念のために言うと、私は Mac OS X 10.8.3 で Java 6 を実行しています。

import javax.swing.*;
import java.awt.*;
import java.awt.datatransfer.StringSelection;
import java.awt.datatransfer.Transferable;

public class DraggableJList {
    public static void main(String[] args) {
        EventQueue.invokeLater( new Runnable() {
            public void run() {
                int count=200;
                String[] elements = new String[count];
                for(int n=0; n<count; n++ ) {
                    elements[n] = String.valueOf( n );
                }

                JList list = new JList( elements );
                list.setDragEnabled( true ); //If I disable this line, the I get smooth scrolling, but I can't drag items to re-order them
                list.setDropMode( DropMode.INSERT );
                final TransferHandler transferHandler = new TransferHandler() {
                    @Override
                    public int getSourceActions( JComponent c ) {
                        return TransferHandler.MOVE;
                    }

                    @Override
                    protected Transferable createTransferable( JComponent c ) {
                        return new StringSelection( "Hey there" );
                    }
                };
                list.setTransferHandler( transferHandler );

                JScrollPane scrollPane = new JScrollPane( list );
                JFrame frame = new JFrame();

                JPanel borderPanel = new JPanel();
                borderPanel.add( scrollPane );
                borderPanel.setBorder( BorderFactory.createEmptyBorder( 40, 40, 40, 40 ) );
                frame.setContentPane( borderPanel );
                frame.pack();
                frame.setVisible( true );
            }
        } );
    }
}
4

2 に答える 2

3

いくつかの検索を行ったところ、これは既知のバグであることが判明しました:

http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6710705

于 2013-08-26T21:07:57.077 に答える