2012-02-19 70 views
2

這裏是我的類,因爲它代表文本區域只獲取數組中的最後一個對象。我需要JTextArea來顯示數組中的所有對象。我已經解決了數組問題,但是,我無法弄清楚如何讓我的按鈕檢索數組。我想在我的驅動類中實現一個actionlistener,但是我得到了靜態錯誤,而java想讓我做最後的東西,但是從來沒有修復過這個問題。我更新了代碼來傳達我的問題。從另一個類的數組中填充JTextArea使用按鈕

public class drink 
{ 
private String name; 
private String carb; 
private String desc; 

public drink(String drinkName, String carbDetail, String descDetail) 
{ 
    name = drinkName; 
    carb = carbDetail; 
    desc = descDetail; 

} 
public String toString() 
{ 
    return(name + carb + desc); 
} 

} 


public class drinkViewer 
{ 
private String string; 
private String name; 
private drink[] theDrinks; 
private int drinkCount=0; 



public drinkViewer(String Name) 
{ 
    name = Name; 
    theDrinks = new drink[5]; 

} 
public void addDrink(String drinkName, String carbDetail, String descDetail) 
{ 
    theDrinks[drinkCount] = new drink(drinkName, carbDetail, descDetail); 
    drinkCount++; 

} 
public void getdrinkArray() 
{ 
    for(int i=0;i<drinkCount;i++) 
     { 
      string += (theDrinks[i].toString()+"\n"); 
      //System.out.println(string); 
     } 
} 


}//end 

import java.awt.BorderLayout; 
import java.awt.Font; 
import java.awt.GridLayout; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import javax.swing.ButtonGroup; 
import javax.swing.JButton; 
import javax.swing.JCheckBox; 
import javax.swing.JComboBox; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.JPanel; 
import javax.swing.JRadioButton; 
import javax.swing.border.EtchedBorder; 
import javax.swing.border.TitledBorder; 
import javax.swing.JTextArea; 

public class driver 
{ 
private JTextArea area; 


public static void main(String args[]) 
{ 
    drinkViewer newViewer = new drinkViewer("test"); 
    newViewer.addDrink("orange", "fruit", "noncarb"); 
    newViewer.addDrink("beer", "5%","carb"); 
    newViewer.loop(); 
    //JTextArea area = new JTextArea(newViewer.getString()); 
    JFrame frame = new JFrame("Drink Descriptions"); 
    frame.setVisible(true); 
    frame.setSize(400,400); 
    JButton button = new JButton("Button"); 
    JPanel panel = new JPanel(); 
    frame.add(panel,BorderLayout.NORTH); 
    panel.add(button,BorderLayout.NORTH); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

    panel.add(area,BorderLayout.SOUTH); 

     class ButtonListener implements ActionListener 
    { 
     public void actionPerformed (ActionEvent event) 
     { 
      JTextArea area = new JTextArea(newViewer.getdrinkArray()); 
     } 
    } 

    listener = new ButtonListener(); 

     } 

     }//end 
+1

我已經提供瞭解決方案,查看它,並初始化drinkViewer構造函數中的字符串以避免錯誤。 – Juvanis 2012-02-19 03:07:05

回答

3

改變這一行中loop()方法string = (theDrinks[i].toString()+"\n");

string += (theDrinks[i].toString()+"\n");

而且還初始化string變量中drinkViewer構造與string = "";否則,你將看到在輸出null...

+0

gak!太慢了。 1+爲您的快速回答。 '回合刪除我的。 – 2012-02-19 02:54:36

+0

對不起,它只是刷新。您是正確的先生,再次感謝。 – newbKen 2012-02-19 03:11:57

+0

我很抱歉我是新來的stackoverflow。這是什麼+1和接受的東西? – newbKen 2012-02-19 03:32:06

3

而不必stringString類型的,你可以考慮StringBuilderStringBuffer,可以附加到。

string = (theDrinks[i].toString()+"\n"); 

將變爲:

string.append(theDrinks[i].toString()+"\n"); 

,然後你會打電話string.toString()getString()

+1

這工作,1+,但簡單的字符串連接應該在這裏工作得很好。對我來說,使用StringBuffer或StringBuilder似乎有些過早優化,特別是對於三項String數組。 – 2012-02-19 03:00:51

2

return聲明試試這個:

public void loop(){ 
    StringBuilder s = new StringBuilder(); 
    for(int i=0;i<drinkCount;i++){ 
     s.append(theDrinks[i].toString()).append("\n"); 
     //System.out.println(theDrinks[i].toString() + "\n"); 
    } 
    string = s.toString(); 
} 

public String getString(){ 
    return string; 
} 
}//end 

其追加每次喝的字符串使用StringBuilder

+0

這工作很好!謝謝我是java的新手我從來沒有聽說過字符串構建器。 – newbKen 2012-02-19 03:09:21

+2

它們是追加/連接字符串的更有效的替代方法。這裏有一個很好的描述:1)http://goo.gl/Ewmt4 2)http://goo.gl/AJuS7 3)http://goo.gl/X1hQ8 – rtheunissen 2012-02-19 03:24:43

相關問題