2012-05-25 15 views
0

我有抓住一個ListModel的所有元素,當我試圖寫字符串到文件它們輸出類似如下的問題:的JList/ListModel的的getElements不工作

[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]); 
     } 

體重是一個的BufferedWriter和ListModel的是,我做了一個自定義列表的模型。你可能會注意到我已經分割字符串,,這是因爲我想從每個列表行中提取兩個不同的值,我在我的customCellRenderer實現中簡單地完成了setText(text +「 - 」+ text),以使我能夠使用「 - 」char作爲分隔符來提取這兩個值

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; 
    } 
} 
+2

爲了更好地幫助越早,張貼[SSCCE(http://sscce.org/)。 對數據進行硬編碼。 –

+1

看起來你正在編寫幾個'String []''的'toString()' - listModel中的元素是什麼? – amaidment

+0

@amaidment ive添加上面列表模型代碼 –

回答

1

您發佈的內容不是ListModel - 這是ListCellRenderer。但這確實強化了您的JList中的每個項目都是String[]的想法 - 例如您正在將JList中的每個值轉換爲String[]進行渲染。

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]); 

不過,我不會真的鼓勵這一點,因爲你必須選中類鑄件。

取而代之的是,我建議你考慮一下爲什麼你在ListModelString[]之間?例如你構建JList如下:

JList myList = new JList(new String[]{"A","B"}, new String[]{"C","D"}); 
+0

即時通訊使用GUI編輯器創建列表,所以不,我現在不創建它與字符串...但我只是試圖演員(String []),它的工作!我發誓我曾嘗試過,但是,它的工作:) –

1

看起來在您的自定義列表模型中,listModel.getElementAt(i)返回一個數組。如果您需要進一步的幫助,請在此處查看併發布您的自定義列表模型。

+0

ive添加我的自定義列表模型代碼到原始的問題帖子 –

+0

它也返回一個單一的字符串,然後我根據' - '字符拆分成一個數組,但值似乎是內存引用,而不是原始字符串 –