在JTextArea中显示具有滚动功能的数组

时间:2017-07-08 15:08:37

标签: java swing arraylist

我正在创建一个GUI,允许用户为佛罗里达州输入Lake信息,然后能够显示该湖泊信息。我希望显示信息在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)
            {

            }

        }
    });

感谢您提供的任何帮助。我这几天一直在绞尽脑汁。能够完成其他任务但回到这个问题。

2 个答案:

答案 0 :(得分:1)

一些明显的问题:

textAreaDisplay = new JTextArea();

应使用以下代码创建JTextArea:

 textAreaDisplay = new JTextArea(5, 20);

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

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

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

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

我认为你希望每个湖在不同的线上显示,所以我会追加"\n"而不是空格。

答案 1 :(得分: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)
            {