【发布时间】:2020-05-05 02:57:12
【问题描述】:
我正在为我正在开发的游戏开发自定义控制台,但是当它尝试显示长消息时,它会在末尾添加“..”并且不显示整个消息,JFrame 的尺寸是720x480,这里是没有计算的代码:
while ((line = in.readLine()) != null) {
JLabel label = new JLabel(line, SwingConstants.LEFT);
label.setBounds(5, currentLine*15, 720, 15);
label.setFont(new Font(Font.MONOSPACED, Font.PLAIN, 15));
frame.add(label);
frame.repaint();
currentLine++;
}
这是它,但需要计算:
while ((line = in.readLine()) != null) {
JLabel label = new JLabel(line + " AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", SwingConstants.LEFT);
double textWidth = label.getMaximumSize().getWidth();
int lineSize = 1;
lineSize = (int) Math.ceil(textWidth / 720);
System.out.println(lineSize); // prints 2
label.setBounds(5, currentLine*20, 720, lineSize*20);
label.setMaximumSize(new Dimension(720, lineSize*20));
label.setFont(ConsoleFont);
frame.add(label);
frame.repaint();
currentLine += lineSize;
}
但不同之处在于,通过计算它会增加 JLabel 的大小,但不会影响它的文本
【问题讨论】:
-
我如何得到它?
-
1) 为了尽快获得更好的帮助,edit 添加minimal reproducible example 或Short, Self Contained, Correct Example。硬编码数据替换(外部文件和)输入流。 2) Java GUI 必须在不同的语言环境中使用不同的 PLAF 在不同的操作系统、屏幕尺寸、屏幕分辨率等上工作。因此,它们不利于像素完美布局。而是使用布局管理器,或combinations of them 以及white space 的布局填充和边框。 ..
-
.. 3) 请学习常见的 Java 命名法(命名约定 - 例如
EachWordUpperCaseClass、firstWordLowerCaseMethod()、firstWordLowerCaseAttribute,除非它是UPPER_CASE_CONSTANT)并始终如一地使用它。
标签: java string swing jframe jlabel