0

Swing に表示する項目のリストがあります。簡単にするために、各アイテムが名前だけで構成されていると想像してください。ユーザーがこれらのアイテムを上下にドラッグアンドドロップして注文できるようにしたい。これを達成するための最良の方法は何ですか?

または、リスト内で選択した項目を上下に移動する「上」および「下」ボタンを備えた JList を使用して、これを実現することもできます。これには、クリックするたびにグラフィック表示を即座に更新し(これを行う方法がわかりません)、リスト内のアイテムを現在の順序で取得して新しい順序を保存する必要があります(方法もわかりません) )。

それとも、ドラッグ アンド ドロップ ソリューションの方が実現可能でしょうか?

4

2 に答える 2

2

あなたが言及したソリューションでこれを実装する方がおそらく簡単なJListので、それについていくつかの指針を示します(私はD&Dの経験があまりありません)。

基本的に、aJListと 2 つの (1 つが上、もう 1 つが下)JButtonの 3 つのコンポーネントが必要です。また、おそらくカスタム リスト モデルも必要になるでしょう。モデルまたはリスト モデルに慣れていない場合は、このチュートリアルを確認してください。それ以外の場合は、読み進めてください。

リスト モデル クラス (例: ) で、とReorderableListModelの 2 つのメソッドを定義します。public void moveUp(int index)public void moveDown(int index)

のコードmoveUpは次のとおりです。

if (index > 0) { // error checking
    // Swap the given index with the previous index.
    // (where `list` is the name of your list variable)
    Collections.swap(list, index, index - 1);
}
// Finally, notify the `JList` that the list structure has changed.
fireContentsChanged(this, index - 1, index);

moveDown似ている:

if (index < getSize() - 1) {
    Collections.swap(list, index, index + 1);
}
fireContentsChanged(this, index, index + 1);

ここで、ボタンのアクション リスナーを実装する必要があります。アップ ボタンについては、次のリスナー コードを試してください。

// First, move the item up in the list.
listModel.moveUp(list.getSelectedIndex());

// Now, set the selection index to keep the same item selected.
//
// If you use the default list selection interval, setting the index to -1
// will do nothing (so it's okay, we don't need error checking here).
list.setSelectedIndex(list.getSelectedIndex() - 1);

同様の「下に移動」メソッドを追加すれば完了です!

「クリックごとにグラフィック表示を即座に更新する」に関してfireContentsChangedは、モデル クラスのメソッドがそれを行います。JList更新を行います。

于 2013-03-11T20:54:32.977 に答える
0

スイングだけでは実現が難しい機能です。JavaFXについて聞いたことがありますか?デスクトップアプリケーションでより動的な機能を実現したい場合は、優れたグラフィックフレームワークです。次の記事をご覧ください: http://docs.oracle.com/javase/tutorial/uiswing/dnd/index.html

ここでは、詳細情報のリンクといくつかの例を見つけることができます。よろしくお願いします。

于 2013-03-11T20:52:37.677 に答える