ArrayList , JFrame, JLabel



我正在尝试创建一个简单的程序,让用户使用JFrame和textfield输入4个字段。把它们保存到一个类中。将该类放入ArrayList中(这样他们就可以选择删除/或添加更多的"类")。然后在一个Frame中显示ArrayList的所有内容。

我得到了四个字段的工作,我相信,但其中的ArrayList内容应该被显示的部分是不工作(我得到一个空白帧)。

这是我添加到数组列表..

public void newEntryFrame()
{
    JFrame entryFrame = new JFrame("Passafe");
    entryFrame.setVisible(true);
    entryFrame.setSize(500, 500);
    entryFrame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
    entryFrame.setLocationRelativeTo(null);
    entryFrame.setLayout(new FlowLayout());
    header.setFont(new Font("Serif", Font.BOLD, 16));
    entryFrame.add(header);
    entryFrame.add(nameLabel);
    entryFrame.add(nametf);
    entryFrame.add(usernameLabel);
    entryFrame.add(usernametf);
    entryFrame.add(passwordLabel);
    entryFrame.add(passwordtf);
    entryFrame.add(descriptionLabel);
    entryFrame.add(descriptiontf);
    entryFrame.add(enterButton);
    enterButton.addActionListener(this);

}
public void actionPerformed(ActionEvent event)
{
    Object source = event.getSource();
    if(source == enterButton)
    {
        name = nametf.getText();
        description = descriptiontf.getText();
        username = usernametf.getText();
        password = passwordtf.getText();
        totalEntries++;
        JOptionPane.showMessageDialog(null, "SAVED");
    }
    else if(source == okButton)
    {
        JOptionPane.showMessageDialog(null, "Ok Button Works");
    }

}

这是我要显示的数组列表

public void viewEntryFrame()
{
    JFrame viewFrame = new JFrame("Passafe");
    viewFrame.setSize(500, 500);
    viewFrame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
    viewFrame.setLocationRelativeTo(null);
    viewFrame.setLayout(new FlowLayout());
    viewFrame.add(listHeader);
    newEntry tempView = new newEntry();
    for(int i = 0; i < totalEntries; ++i)
    {
        tempView = entries.get(i);
        viewFrame.add(tempView.display);
    }
    viewFrame.add(okButton);
    okButton.addActionListener(this);
    viewFrame.setVisible(true);
}

我可能完全做错了,如果这样的话,你能给我指出正确的方向吗?

我想你从来没有叫过setContentPane()。JFrame在它的主要部分只有一个组件。您必须创建一个JPanel,您可以向其中添加所需的所有组件,然后将其添加到JFrame中。

JFrame frame = new JFrame();
JPanel panel = new JPanel();
panel.add(/**whatever you want in your JFrame**/);
//...
panel.add(/**whatever you want in your JFrame**/);
frame.setContentPane(panel);

你似乎从来没有添加任何东西到你的entries列表…

public void actionPerformed(ActionEvent event)
{
    Object source = event.getSource();
    if(source == enterButton)
    {
        name = nametf.getText();
        description = descriptiontf.getText();
        username = usernametf.getText();
        password = passwordtf.getText();
        totalEntries++;
        // Nope, nothing here...
        JOptionPane.showMessageDialog(null, "SAVED");
    }
    //...
}

而且,这是非常危险的…

newEntry tempView = new newEntry();
for(int i = 0; i < totalEntries; ++i)
{
    tempView = entries.get(i);
    viewFrame.add(tempView.display);
}

而不是依赖于ArrayList的实际一面,你依赖于一些其他变量,它可能等于或不等于实际大小,相反,你应该使用ArrayList#size,例如

for(int i = 0; i < entries.size(); ++i)
{
    newEntry tempView = entries.get(i);
    viewFrame.add(tempView.display);
}

或者如果你使用Java 5+…

for(newEntry tempView : enties)
{
    viewFrame.add(tempView.display);
}

最新更新