我正在创建一个GUI,该GUI将允许用户输入佛罗里达州的湖泊信息,然后能够显示该湖泊信息。 我希望显示信息在JOptionPane.showMessageDialog中,它能够滚动浏览所有湖泊名称的ArrayList。 我可以将湖泊添加到ArrayList中,但它们不会显示在我的JOptionPane中,并且为空白。 我知道它正在读取ArrayList中的内容,因为它正在打开该窗口。 以下是摘要中的以下代码,因为整个过程很简单。

public static ArrayList<Lakes> lake = new ArrayList<Lakes>();
private JTextArea textAreaDisplay;
private JScrollPane spDisplay;

// this is called in my initComponent method to create both 
    textAreaDisplay = new JTextArea();

    for (Object obj : lake)
    {
        textAreaDisplay.append(obj.toString() + " ");
    }

    spDisplay = new JScrollPane(textAreaDisplay);

    textAreaDisplay.setLineWrap(true);
    textAreaDisplay.setWrapStyleWord(true);
    spDisplay.setPreferredSize(new Dimension(500, 500));

    // this is called in my createEvents method. After creating lakes in the database
    // it will display the else statement but it is empty

    btnDisplayLake.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            try
            {
                if (lake.size() == 0) 
                {
                    JOptionPane.showMessageDialog(null, "No Lakes in database!");
                }
                else
                    JOptionPane.showMessageDialog(null, spDisplay, "Display Lakes", JOptionPane.YES_NO_OPTION);
            }
            catch (Exception e1)
            {

            }

        }
    });

感谢您提供任何帮助。 我为此花了几天的精力。 能够完成其他工作,但又回到了这个问题。

===============>>#1 票数:1

一些明显的问题:

textAreaDisplay = new JTextArea();

应该使用以下代码创建一个JTextArea:

 textAreaDisplay = new JTextArea(5, 20);

通过指定行/列,文本区域将能够计算其自己的首选大小。 当文本区域的首选大小大于滚动窗格的大小时,应显示滚动条。

spDisplay.setPreferredSize(new Dimension(500, 500));

不要使用setPreferredSize()。 滚动区域将根据文本区域的首选大小来计算其首选大小。

textAreaDisplay.append(obj.toString() + " ");

我认为您希望每个Lake都显示在不同的行上,因此我将附加"\\n"而不是空格。

===============>>#2 票数:0

我在将任何内容输入到ArrayList之前设置了textAreaDisplay ,并且在输入任何内容后不会再次运行。 我将for循环移到了actionPerformed事件中,并且现在运行良好。

    btnDisplayLake.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            try
            {
                for (Object obj : lake)
                {
                    textAreaDisplay.append(obj.toString() + "\n");
                }
                if (lake.size() == 0) 
                {
                    JOptionPane.showMessageDialog(null, "No Lakes in database!");
                }
                else
                    JOptionPane.showMessageDialog(null, spDisplay, "Display Lakes", JOptionPane.YES_NO_OPTION);
            }
            catch (Exception e1)
            {

  ask by Matthew Phaneuf translate from so

未解决问题?本站智能推荐: