JScrollPane从窗口飞出的文本

时间:2012-08-08 16:29:59

标签: java loops stream scroll frame

我正在尝试显示JFrame,将文本文件中的每一行读取到JLabel,并将JLabel放入JScrollPaneJScrollPane然后将1}}添加到我的窗口的Container中。内容和标签已加载,但有一个问题,只要窗口加载我的JScrollPane拉链并离开Container,我就会留下一个空白窗口。有帮助吗?这是代码:

import java.awt.Container;
import java.util.Scanner;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JScrollPane;

public class Helper extends JFrame{

String  filepath = "assets/help.txt";
Scanner reader;
Container contentpane;
JScrollPane scrp =  new JScrollPane(null);
JLabel line = new JLabel();
int align_x, align_y;
int window_width  = 700;
int window_height = 700;

public Helper(){ 
    setSize(window_height,window_width);
    setVisible(true);
    setTitle("Electric Force Calculator Helper");
    scrp.setSize(window_height,window_width);
    scrp.setVisible(true);

    contentpane = getContentPane();
    reader = new Scanner(getClass().getResourceAsStream(filepath));

    align_x = 10;
    align_y = 10;

    while(reader.hasNextLine()){
        line = new JLabel(reader.nextLine());
        line.setBounds(align_x,align_y,window_width,20);
        scrp.add(line);
        align_y+=20;
    }
    contentpane.add(scrp);

}

public static void showHelpFrame(){
    Helper newHelper = new Helper();
}
}

2 个答案:

答案 0 :(得分:1)

line = new JLabel(reader.nextLine());您每次都在创建一个新标签,然后将该标签添加到JScrollPanescrp.add(line);的另一个标签上JList

更好的方法是使用JList,将JScrollPane打包在DefaultListModel<String> lines = new DefaultListModel<String>(); JList l = new JList(lines); JScrollPane scrp = new JScrollPane(l); while(reader.hasNextLine()) { lines.addElement(reader.nextLine()); } 中,然后使用您的文本行填充列表的数据模型。

{{1}}

答案 1 :(得分:1)

是的,不要使用JLabel。使用JList。或者,首先将所有JLabel添加到单独的JPanel,然后将其添加到JSCrollPane。

我有一些建议可以给你。

  1. 为变量使用更多用户友好名称(这些名称很小。你真的需要使用下划线,而不是使用骆驼案吗?无论如何都取决于你)

  2. 即使在使用最简单的GUI之前,也不要将所有内容都设置为可见。尽可能在构造函数的末尾做可见的东西

  3. 您正在扩展JFrame。所以,让它可见。在这里,你已经打电话了 setVisible(true)也是JScrollPane,这是没有必要的。

  4. 调用getContentPane的最简单方法是getContentPane()。add(stuff)。无需为此创建单独的变量。

  5. 在构造函数中初始化变量。不是在那之前,把它排除在一切之外。这是可能的,但这并不意味着它没问题。