2012-02-19 80 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

相关问题