2012-03-05 11 views
2

ユーザーがドラッグアンドドロップで再注文できるように拡張したJList(Reorder a JList with Drag-and-DropUse drag and drop to reorder a list)が奇妙な結果をもたらします。私に私のカスタムJComponentを与える代わりに、それは私に.toString()の価値を与えます。私は私のカスタムモデルJListDefaultListModel<JComponent>に設定しましたが、それはうまくいくと思っていました。Java JList不要なtoString()変換

+1

レンダラーは何ですか? –

+1

これらの記事は厳しく時代遅れです.dndをカスタマイズする現在の方法は、カスタムのTransferHandlerです。http://docs.oracle.com/javase/tutorial/uiswing/index.htmlの対応する章を参照してください。 – kleopatra

+1

ちょうど気付いた:you _never_ 99.99%)は、リストにJComponent型の項目を持っています。 – kleopatra

答えて

5

レンダリングするオブジェクトのカスタムCellRendererを作成する必要があります。デフォルトでは、JListはコンポーネントのtoString値を表示します(DefaultListCellRendererはJLabelを拡張するため)。

class MyRenderer extends DefaultListCellRenderer { 
    public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) { 
     Component c = super.getListCellRendererComponent(...); 
     setText(getValue(value)); // where getValue is some method you implement that gets the text you want to render for the component 
     return c; 
} 

文字列を実際にレンダリングしない場合は、レンダリングするコンポーネントを返すCellRendererの実装を作成します。

+0

私はJComponentを拡張している間に 'CellRenderer'を実装してgetListCellRendererComponent()がJComponentを返すようにしていますか?私はそれを試してみます。ありがとう:) –

+0

**ありがとうございました!**うまくいきました! –

+0

確かなこと - 喜んで助けてください –

関連する問題