【问题标题】:Converting defined Jframe size to auto-sizing based on screensize将定义的 Jframe 大小转换为基于屏幕大小的自动调整大小
【发布时间】: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);

将所有内容添加到PanelPanelframe

   //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);   

但它似乎没有做任何事情。 我不认为我很好地掌握了如何做到这一点。考虑到我绝对没有这样做,任何提示都表示赞赏。

我不确定我是否只需要调整Panelframe 的大小,因为这是里面的所有内容,但由于它没有做任何事情,所以我似乎不得不做更多的事情。我需要调整所有组件的大小吗?

也不知道为什么我将Panel 的大小与frame 的大小相同,而不是将所有内容添加到frame。很长一段时间后我正在重新访问此代码。

【问题讨论】:

  • 1) 为了尽快获得更好的帮助,edit 添加minimal reproducible exampleShort, Self Contained, Correct Example。 2) 以最小尺寸提供 ASCII 艺术或 GUI 的 预期 布局的简单绘图,如果可调整大小,则具有更大的宽度和高度 - 以显示应如何使用额外空间。 3) Java GUI 必须在不同的操作系统、屏幕尺寸、屏幕分辨率等上工作,在不同的语言环境中使用不同的 PLAF。因此,它们不利于像素完美布局。而是使用布局管理器,或 combinations of them ..
  • .. 以及 white space 的布局填充和边框。 4) 请学习常见的 Java 命名法(命名约定 - 例如EachWordUpperCaseClassfirstWordLowerCaseMethod()firstWordLowerCaseAttribute,除非它是 UPPER_CASE_CONSTANT)并始终如一地使用它。 5)Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize(); frame.setBounds(0,0,screenSize.width, screenSize.height); 改用JFrame.setExtendedState(JFrame.MAXIMIZED_BOTH)(检查编译器/文档/常识)

标签: java swing resize awt


【解决方案1】:

由于您的布局是null,因此当窗口改变大小时,组件很可能不会自行调整大小。您要么必须手动移动组件并调整其大小以适应窗口,要么添加布局。

我建议使用 BorderLayout、GridLayout 或两者的组合,具体取决于您的 GUI 的高级程度。学习布局的一个好方法是使用 Oracles 教程:

边框布局: https://docs.oracle.com/javase/tutorial/uiswing/layout/border.html

网格布局: https://docs.oracle.com/javase/tutorial/uiswing/layout/grid.html

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-05-01
    • 2015-07-16
    • 2013-11-25
    • 1970-01-01
    • 1970-01-01
    • 2016-03-24
    • 1970-01-01
    相关资源
    最近更新 更多