使用按钮从另一个类中的数组填充 JTextArea

发布于 2025-01-07 03:15:01 字数 2535 浏览 4 评论 0原文

这是我的类,因为它代表文本区域仅获取数组中的最后一个对象。我需要 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

↙温凉少女 2025-01-14 03:15:01

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

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

并在 drinkViewer 构造函数中使用 string = "";< 初始化您的 string 变量/code> 否则你会看到输出中的 null...

Change this line in loop() method string = (theDrinks[i].toString()+"\n");

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

And also initialize your string variable inside drinkViewer constructor with string = ""; Otherwise you will see null... in your output.

千纸鹤带着心事 2025-01-14 03:15:01

您可以考虑使用 StringBuilderStringBuffer,而不是将 string 设为 String 类型,它们可以附加到。

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

将更改为:

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

然后您将在 getString()return 语句中调用 string.toString()

Instead of having string be of type String, you could consider a StringBuilder or StringBuffer, which can be appended to.

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

would change to:

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

and then you would call string.toString() in the return statement of getString()

守望孤独 2025-01-14 03:15:01

试试这个:

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 将每种饮料附加到字符串中。

Try this:

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

It appends each drink to the string using a StringBuilder.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文