使用按钮从另一个类中的数组填充 JTextArea
这是我的类,因为它代表文本区域仅获取数组中的最后一个对象。我需要 JTextArea 来显示数组中的所有对象。我已经解决了数组问题,但是,我无法弄清楚如何让我的按钮检索数组。我想在我的驱动程序类中实现一个动作监听器,但我收到静态错误,java希望我将东西做成最终的,但这永远无法解决问题。我已更新代码来传达我的问题。
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
here are my classes, as it stands the text area only gets the last object in the array. I need the JTextArea to display all the objects in the array. I have fixed the array problem,however, I cannot figure out how to make my button retrieve the array. I would like to implement an actionlistener in my driver class but I am getting static errors and java would like me to make stuff final but that never fixes the problem. I have updated to code to communicate my problem.
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
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
将
loop()
方法string = (theDrinks[i].toString()+"\n");
中的这一行更改为
string += (theDrinks[ i].toString()+"\n");
并在
drinkViewer
构造函数中使用string = "";< 初始化您的
string
变量/code> 否则你会看到输出中的null...
。Change this line in
loop()
methodstring = (theDrinks[i].toString()+"\n");
to
string += (theDrinks[i].toString()+"\n");
And also initialize your
string
variable insidedrinkViewer
constructor withstring = "";
Otherwise you will seenull...
in your output.您可以考虑使用
StringBuilder
或StringBuffer
,而不是将string
设为String
类型,它们可以附加到。将更改为:
然后您将在
getString()
的return
语句中调用string.toString()
Instead of having
string
be of typeString
, you could consider aStringBuilder
orStringBuffer
, which can be appended to.would change to:
and then you would call
string.toString()
in thereturn
statement ofgetString()
试试这个:
它使用
StringBuilder
将每种饮料附加到字符串中。Try this:
It appends each drink to the string using a
StringBuilder
.