【发布时间】:2020-12-27 11:46:52
【问题描述】:
我正在开发一个 java 项目,一个二进制时钟以及来自 API 的天气统计数据。最初编写它时,我错误地将帧大小定义为屏幕的特定分辨率。现在我得到了一台屏幕尺寸不同的新笔记本电脑,我已经认识到我的错误,但我不确定如何修复它。 (因为我的旧笔记本电脑是 4k 而我的新笔记本电脑不是,所以它都被切断了)。
所有组件也是基于我的面板的定义大小和框架大小定义的大小,两者都是
.setSize(2000,1500);我已经尝试插入了
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
frame.setBounds(0,0,screenSize.width, screenSize.height);
在我的框架中:
JFrame frame = new JFrame("12-Hour Binary Clock");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(2000,1500);
frame.getContentPane().setBackground(Color.DARK_GRAY.darker().darker().darker());
frame.setExtendedState(JFrame.MAXIMIZED_BOTH);
除了修改我的主面板Panel,所有组件都在其中:
JPanel Panel = new JPanel();
Panel.setLayout(null);
Panel.setSize(2000, 1500);
Panel.setBackground(null);
Panel.setLocation(400, 100);
Panel.setVisible(true);
到
JPanel Panel = new JPanel();
Panel.setLayout(null);
Panel.setSize(screenSize.width, screenSize.height);
Panel.setBackground(null);
Panel.setLocation(400, 100);
Panel.setVisible(true);
将所有内容添加到Panel 和Panel 到frame:
//adding components to panel and panel to frame at end of program
Panel.add(inner);
Panel.add(labelOne); //JLabel components inside Panel
Panel.add(labelTwo);
Panel.add(labelFour);
Panel.add(labelEight);
frame.add(weather);
frame.add(Panel, BorderLayout.CENTER);
但它似乎没有做任何事情。 我不认为我很好地掌握了如何做到这一点。考虑到我绝对没有这样做,任何提示都表示赞赏。
我不确定我是否只需要调整Panel 和frame 的大小,因为这是里面的所有内容,但由于它没有做任何事情,所以我似乎不得不做更多的事情。我需要调整所有组件的大小吗?
也不知道为什么我将Panel 的大小与frame 的大小相同,而不是将所有内容添加到frame。很长一段时间后我正在重新访问此代码。
【问题讨论】:
-
1) 为了尽快获得更好的帮助,edit 添加minimal reproducible example 或Short, Self Contained, Correct Example。 2) 以最小尺寸提供 ASCII 艺术或 GUI 的 预期 布局的简单绘图,如果可调整大小,则具有更大的宽度和高度 - 以显示应如何使用额外空间。 3) Java GUI 必须在不同的操作系统、屏幕尺寸、屏幕分辨率等上工作,在不同的语言环境中使用不同的 PLAF。因此,它们不利于像素完美布局。而是使用布局管理器,或 combinations of them ..
-
.. 以及 white space 的布局填充和边框。 4) 请学习常见的 Java 命名法(命名约定 - 例如
EachWordUpperCaseClass、firstWordLowerCaseMethod()、firstWordLowerCaseAttribute,除非它是UPPER_CASE_CONSTANT)并始终如一地使用它。 5)Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize(); frame.setBounds(0,0,screenSize.width, screenSize.height);改用JFrame.setExtendedState(JFrame.MAXIMIZED_BOTH)(检查编译器/文档/常识)