gpt4 book ai didi

java - JScrollPane 测试从窗口飞行

转载 作者:行者123 更新时间:2023-11-30 04:42:45 28 4
gpt4 key购买 nike

我正在尝试创建一个 JFrame ,它将文本文件中的每一行读取到 JLabel 中,并将该 JLabel 放入JScrollPane,然后将 JScrollPane 添加到我的窗口的容器中。内容和标签已加载,但有一个问题,一旦窗口加载,我的 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();
}
}

最佳答案

line = new JLabel(reader.nextLine()); 您每次都会在此处创建一个新标签,然后将该标签添加到 JScrollPane 中的其他标签上与 scrp.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());
}

关于java - JScrollPane 测试从窗口飞行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11869000/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com