我正在创建一个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)
{
}
}
});
感谢您提供的任何帮助。我这几天一直在绞尽脑汁。能够完成其他任务但回到这个问题。
答案 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)
{