在Java Swing中手动设置分辨率

时间:2018-01-31 14:13:50

标签: java swing resolution dpi java-9

我需要一种手动控制/拉伸整个GUI大小的方法。

我有一个1400 x 1050桌面(原始分辨率),我想在代码中手动将分辨率扩展到1024 x 1050,因为我的应用程序是在1024 x 768桌面上编写的。所以一般来说整个框架和所有按钮等应该整体拉伸/更大,关系应该保持不变。

我无法通过Windows属性执行此操作,因为由于其他应用程序,分辨率通常需要为1400 x 1050。

我的方法类似于:

Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
screenHeight = screenSize.height;
screenWidth = screenSize.width; 

..然后通过setSize()更改屏幕尺寸?但我不明白。

Java Tookit Screen Resolution - How can I use it?

..遗憾的是,答案中的链接不再适用。

如何在Java Swing中手动设置分辨率?

1 个答案:

答案 0 :(得分:2)

正如评论中所提到的,这里最好的方法是修复底层代码,不要求1024 x 768显示。这通常是前端Java代码的非常不同的代码味道。正确使用Layout Managers 几乎总能让您的显示器以更灵活的方式运行。

然而,在行业中,有时重构以使遗留组件正常运行 并非可行。在这种情况下,我建议您将不可灵活的GUI视为可以控制的更大GUI的组件。

请考虑以下示例代码:

public static void main(String[] args) {
  // Initialize the frame
  JFrame myApp = new JFrame("App");
  myApp.setSize(1400, 1050);

  // Create container for the GUI
  JPanel container = new JPanel(new BorderLayout());
  container.setPreferredSize(new Dimension(1024, 768));

  // Load the GUI into the container
  JComponent myGui = new JPanel(); // Replace this with actual GUI.
  myGui.setBackground(Color.RED); // Remove this once using actual GUI.
  container.add(myGui, BorderLayout.CENTER);

  // Create the frame's content pane
  JPanel content = new JPanel(new FlowLayout(FlowLayout.CENTER));
  content.setBackground(Color.BLUE); // Also remove this in production.

  // Add GUI to content pane
  content.add(container);

  // Add content pane to frame, show frame
  myApp.setContentPane(content);
  myApp.setVisible(true);
}

这是有效的,因为我们已将GUI添加到CENTER面板的BorderLayout(在没有任何组件的情况下,它会拉伸GUI以占据面板的整个大小NORTH/SOUTH/EAST/WEST)。我们将BorderLayout面板的首选大小设置为1024 x 768(IE:指定GUI的大小),然后将该面板提供给FlowLayout面板(将保留首选尺寸。)

结果是我们的1400 x 1050应用程序包含1024 x 768的GUI组件渲染(您可以通过修改包含BorderLayout的面板的首选大小轻松将其更改为1024 x 1050.)

作为对用户的练习,您会注意到如果您运行此GUI代码,GUI代码不会垂直居中。这可以通过修改content面板的布局来解决。