问题描述
我正在研究Java项目,二进制时钟以及API的天气统计信息。最初编写它时,我犯了一个错误,即将帧大小定义为屏幕的特定分辨率。现在,我已经购买了具有不同屏幕尺寸的新笔记本电脑,我已经认识到自己的错误,而且不确定如何解决。 (由于我的旧笔记本电脑是4k,而我的新笔记本电脑不是,所以全部关闭了。)
基于我的面板的已定义尺寸和框架尺寸,所有组件的尺寸也均已定义
.setSize(2000,1500);
我尝试插入
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
frame.setBounds(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
中。很久以后,我将重新访问此代码。
解决方法
由于布局为null
,因此当窗口更改大小时,组件很可能不会自行调整大小。您将不得不手动移动组件并调整其大小以适合窗口或添加布局。
我建议使用BorderLayout,GridLayout或两者结合使用,具体取决于GUI的先进程度。学习布局的一种好方法是使用Oracle教程:
BorderLayout: https://docs.oracle.com/javase/tutorial/uiswing/layout/border.html
GridLayout: https://docs.oracle.com/javase/tutorial/uiswing/layout/grid.html