【问题标题】:Posting to array list发布到数组列表
【发布时间】:2011-08-16 11:10:33
【问题描述】:

我希望将在我的文本字段中输入的值传递到数组列表中,尽管我似乎无法做到这一点。我可以查看使用时在控制台中输入的详细信息

       System.out.println(houses.get(1).getHouseNumber())

但这不会将新输入的值发布到我的代码中的数组列表中,我不明白为什么。

ArrayList 和 ActionListener 代码

final ArrayList<House> houses = new ArrayList<House>();
        houses.add(new House());
 button.addActionListener(new ActionListener()
 {
        public void actionPerformed(ActionEvent e) {
        House house = new House();
        house.setHouseNumber(houseNumber.getText());
        house.setStreetName(streetName.getText());
        house.setTown(town.getText());
        house.setPostcode(postcode.getText());
        houses.add(house);
            System.out.println(houses.get(1).getHouseNumber());
            System.out.println(houses.get(1).getStreetName());
            System.out.println(houses.get(1).getTown());
            System.out.println(houses.get(1).getPostcode());
       }
   });

图形界面代码

  public void go(){
    frame = new JFrame();
    panel = new JPanel();
    HouseNumberLabel = new JLabel ("House Number");
    houseNumber = new JTextField ("");
    StreetNameLabel = new JLabel ("Street name");
    streetName = new JTextField ("");
    TownLabel = new JLabel ("Town");
    town = new JTextField ("");
    PostcodeLabel = new JLabel ("Postcode");
    postcode = new JTextField ("");
    BedsLabel = new JLabel ("Number of beds");
    beds = new JTextField ("");
    PriceLabel = new JLabel ("Price (£)");
    price = new JTextField ("");
    TypeLabel = new JLabel ("Building Type");
    type = new JTextField ("");
    button = new JButton("Submit");
    panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS));
    frame.getContentPane().add(panel);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setSize(300,300);
    frame.setVisible(true)

房屋等级代码

class House {
    private String houseNumber;
private String streetName;
private String town;
private String postcode;

public String getHouseNumber() {
    return houseNumber;
}
public void setHouseNumber(String houseNumber) {
    this.houseNumber = houseNumber;
}

【问题讨论】:

  • 根据您的代码,您没有从 JtextField 获取值。 Submit 是什么类型的?
  • @Darren:建议,不要使用大写字母作为变量名的首字母。您从哪里获得 houseNumber、town...以及所有这些信息?
  • @Harry Joy:谢谢,我已将变量 submit 更改为小写,并添加了显示 houseNUMber 来自何处的附加代码
  • 您可能希望确保与您的侦听器相关的事件实际上正在被触发。通过了解什么是“提交”,也许我们可以推断出更多。但是这里的错误并不明显。
  • @edalorzo:我会确保动作监听器正在触发吗?并且提交只是我的 jbutton,它应该将详细信息发布到数组列表中

标签: java swing


【解决方案1】:
String houseNumber;  

这个变量不需要,去掉它;

JTextField HouseNumber1; 

这不遵循正确的 java 命名约定。变量名不以大写字符开头。变量名应该是:

JTextField houseNumber; 

现在在 ActionListener 中,您可以直接从文本字段中获取文本:

house.setHouseNumber( houseNumber.getText() );   

编辑:

okButton.addActionListener( new ActionListener()
{
    public void actionPerformed(ActionEvent e)
    {
        System.out.println( "ok" );
    }
});

【讨论】:

  • 感谢这有帮助,尽管仍然没有发布任何内容,是否有必要在课堂上声明“实现 actionListener”?当我这样做时,我被告知要添加抽象方法,但不应该有抽象方法,因为我拥有所有 aciotnliistener 组件:S
  • 通常您不会实现 ActionListener 接口,因为您的类中可能有多个按钮作为 ActionEvents 的侦听器。一个常见的解决方案是为 ActionListener 使用匿名内部类。查看编辑。
【解决方案2】:

用它打印出数组并显示[demo2.House@e2eec8, demo2.House@aa9835]

House@e2eec8House@aa9835分别指ArrayList中的第一宫和第二宫。试试这样的:

System.out.println(houses.get(0).getHouseNumber());

附录:

我在我的代码中看不到 ArrayList 中的详细信息。

您可以在House 中覆盖toString();这样你就可以这样做:

System.out.println(houses.get(0));

附录:

这不会将新输入的值发布到ArrayList

System.out.println(houses.get(1).getHouseNumber());

对,这总是得到第二个条目,从 0 开始。下面总是得到最后一个发送到add()

System.out.println(houses.get(houses.size() - 1).getHouseNumber());

附录:您可以像这样循环遍历houses

for (House h : houses) {
    System.out.print(h.getHouseNumber());
    System.out.print(h.getStreetName());
    ...
}

【讨论】:

  • 除非您以其他方式将结果放在那里。您可以更新您的问题以显示您的最新代码。
  • 刚刚尝试过,它可以工作,门牌号打印在控制台中,只是为了澄清一下,这是否意味着细节现在已经传递到我的数组中?只是我在我的代码中看不到 Arraylist 中的详细信息
  • 我已经在上面详细说明了。您可以打印house.get…,但我认为您验证它是否已添加是正确的。也可以查看houses.add(house)返回的结果。
  • 虽然这确实向我显示了最后输入的详细信息,但它们似乎仍然没有保存到数组列表中,这是我需要他们做的,当我尝试打印数组列表以查看所有内容时它的内容我仍然显示 [demo2.House@12d03f9] 而不是实际的细节。详细信息是否应该出现在我的代码中? “最终 ArrayList 房屋 = 新 ArrayList();”就像在自己的代码中手动输入它们一样?
  • 符号House@12d03f9 是对整个House 实例的引用。您可能希望遍历数组以查看所有内容,如上所示。你用的是什么教材?
猜你喜欢
  • 2018-03-14
  • 2018-06-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-15
  • 1970-01-01
  • 2016-05-06
  • 1970-01-01
相关资源
最近更新 更多