0

ListModelのすべての要素を取得する際に問題が発生しました。文字列をファイルに書き込もうとすると、次のような出力が返されます。

[Ljava.lang.String;@79b43f[Ljava.lang.String;@79b43f

だから私は何が間違っているのですか?悲しみを引き起こしているコードは次のとおりです。

for (int i = 0; i < listModel.getSize(); i++)
        {
            String[] temp = listModel.getElementAt(i).toString().split("-");
            bw.write(temp[0]);
            bw.write(temp[1]);

            System.out.println(temp[0]);
        }

bwはbufferedWriterであり、listModelは私が作成したカスタムリストモデルです。文字列を分割したことに気付くかもしれません。これは、各リスト行から2つの異なる値を抽出したいため、setText(text + 2つの値を抽出するためのデリムとして「-」文字を使用できるようにするために、customCellRenderer実装で「-」+テキスト)

public class CustomCellRenderer extends JLabel
implements ListCellRenderer
{
    JLabel left, right;
}

public CustomCellRenderer() 
{
    setOpaque(true);
}

@Override
public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus)
{        
    String leftData = ((String[])value)[0];
    String rightData = ((String[])value)[1];

    // simply will not function how i want it to.. GRR
    leftData = String.format("%-50s", leftData);


    setText(leftData + "-   " + rightData);

    if (isSelected)
    {
        setBackground(list.getSelectionBackground());
        setForeground(list.getSelectionForeground());
        setBackground(list.getSelectionBackground());
        setForeground(list.getSelectionForeground());
    }
    else
    {
        setBackground(list.getBackground());
        setForeground(list.getForeground());
        setBackground(list.getBackground());
        setForeground(list.getForeground());
    }

    return this;
    }
}
4

2 に答える 2

1

あなたが投稿したListModelのは ではありません - それはListCellRendererです。JListしかし、これは、あなたの各アイテムが であるという考えを補強します。たとえば、レンダリングのためString[]に の各値を にキャストしています。JListString[]

String leftData = ((String[])value)[0];
String rightData = ((String[])value)[1];

がどこに配置されているかについて、多少の混乱があるようListModelです。あなたの投稿/コードは、それがに取り込まれていると思うことを示唆していますListCellRenderer- これはそうではありません。にすでにある値を表示する方法を考えているだけListModelです。

したがって、簡単な修正は「あなたに悲しみを与えているコード」にある可能性があります。

String[] temp = (String[]) listModel.getElementAt(i);
bw.write(temp[0]);
bw.write(temp[1]);

ただし、チェックされていないクラスキャストがあるため、これはあまりお勧めしません。

ListModel代わりに、String[]そもそもなぜにデータを入力するのかを検討することをお勧めします。JListたとえば、次のように構築していますか。

JList myList = new JList(new String[]{"A","B"}, new String[]{"C","D"});
于 2012-05-28T07:53:52.853 に答える
1

カスタム リスト モデルでは、listModel.getElementAt(i) は配列を返します。さらにサポートが必要な場合は、それを確認し、カスタム リスト モデルをここに投稿してください。

于 2012-05-25T07:30:58.530 に答える