【问题标题】:Array trouble in javajava中的数组问题
【发布时间】:2011-03-07 15:56:32
【问题描述】:

你好 我正在制作一个程序,通过 textfield0 输入名称来跟踪登录的用户数量。我遇到了一个新的 java 障碍我仍然不明白一些事情我想知道如何将名称实时添加到数组 User 并让数组计数它在 textfield1 中显示它。

提前谢谢你。

public class UserTracking {


    public static void main(String[] args){
        final Kong f = new Kong();
        f.pack();
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.setSize(200,110);
        f.setVisible(true);

    }


}
class Kong extends JFrame implements  ActionListener
{
    JTextField textfield0 = new JTextField();
    JTextField textfield1 = new JTextField();
    JLabel  label0 = new JLabel("User");
    JLabel  label1 = new JLabel("Number of Users:");
    JButton btnon = new JButton("Log on");
    JButton btnoff = new JButton("Log off");
    String User[] ={};


    public Kong()
    {
        super("Shazam");

    JPanel panel1 = new JPanel(new BorderLayout());
        panel1.add(textfield0,BorderLayout.CENTER);
        panel1.add(label0,BorderLayout.WEST);
    JPanel panel2 = new JPanel(new BorderLayout(10,10));
        panel2.add(btnon,BorderLayout.WEST);
        panel2.add(btnoff,BorderLayout.EAST);
    JPanel panel3 = new JPanel(new BorderLayout());
        panel3.add(textfield1,BorderLayout.CENTER);
        panel3.add(label1,BorderLayout.WEST);



    JPanel frame =  new JPanel(new BorderLayout(5,5));
        frame.add(panel1,BorderLayout.NORTH);
        frame.add(panel2,BorderLayout.EAST);
        frame.add(panel3,BorderLayout.SOUTH);
        setContentPane(frame);
    }

    public void actionPerformed(ActionEvent e)
    {

    }
}

【问题讨论】:

    标签: java arrays swing


    【解决方案1】:

    如果您有使用 C++ 的经验,请将 Java 数组视为 C++ 数组,因为一旦定义了它们的大小,它就会保持不变。如果你想增加容量,你需要重新创建数组并在里面添加旧数组的内容。本质上这就是vector所做的。

    在 Java 中,如果您想要一个可扩展的数组,那么您基本上需要一个 List 对象。我强烈建议您使用 ArrayList,它本质上相当于 Java 中的向量,允许您添加任意数量的对象,而无需担心其容量。

    如果您需要一个数组,可以使用 toArray() 方法对其进行转换(尽管根据我的经验,ArrayList 可以满足您的所有需求)。

    【讨论】:

      【解决方案2】:

      java 中数组的大小在第一次初始化后无法更改。

      如果您想要一个动态大小的数据容器,您可以使用List 接口的任何实现。例如数组列表:

      ArrayList<String> user = new ArrayList<String>();
      

      并将每个用户添加到 ArrayList :

      user.add(username);
      

      【讨论】:

        【解决方案3】:

        使用ArrayList

        【讨论】:

          【解决方案4】:

          您需要的不是数组,而是更灵活的数据类型(能够“增长”大小),例如一些 List 实现:ArrayList 实际上是由数组支持的,但您不需要管理(重新) 自己分配。

          【讨论】:

            【解决方案5】:

            您可以使用 ArrayList 而不是使用 String 数组,这样会更容易。像这样的

            ArrayList<String> user = new ArrayList<String>();
            

            在按钮或文本更改事件之类的操作上写这个

            user.add(textField1.getText());
            

            【讨论】:

              【解决方案6】:

              actionPerformed 方法应该

              • 在用户数组中添加一个字符串(应该命名为users
              • 询问数组的新长度
              • 更改计数文本字段中的值(textfield1,它的名字真的很糟糕)

              问题在于 Java 数组的长度是固定的。他们无法成长。这就是java.util.ArrayList 存在的原因:它是一个行为类似于动态长度数组的类。阅读its javadoc 了解如何使用它。

              【讨论】:

                【解决方案7】:

                您还缺少到 ActionListener 的链接按钮。完成后,您可以使用 ArrayList 在用户登录时将用户添加到列表中,并在用户注销时从列表中删除用户。

                private ArrayList<String> loggedOnUsers = new ArrayList<String>();
                

                void actionPerformed(event)
                {
                    if(it's logOn button action)
                    {
                        add user to loggedOnUsers list
                    }
                    else
                    {
                       remove user from loggedOnUsers list
                    }
                }
                

                【讨论】:

                  猜你喜欢
                  • 1970-01-01
                  • 2011-06-15
                  • 2011-07-07
                  • 2016-09-19
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  相关资源
                  最近更新 更多