繁体   English   中英

在Java Swing中手动设置分辨率

[英]Set resolution manually in Java Swing

我需要一种方法来手动控制/拉伸整个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屏幕分辨率-如何使用它?

..很遗憾,此处答案中的链接不再起作用。

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

如评论中所提到的,这里最好的方法是修复基础代码以不强制使用1024 x 768的显示。 通常,这是前端Java代码非常独特的代码味道。 正确使用布局管理几乎总是可以使您的显示器以更灵活的方式运行。

但是,在工业中,有时进行重构以使旧组件正常运行不是可行的努力。 在这种情况下,我建议您将无法重构的不灵活的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);
}

之所以CENTER ,是因为我们已经将GUI添加到BorderLayout面板的CENTER中(如果在NORTH/SOUTH/EAST/WEST上没有任何组件,它将扩展GUI来占据面板的整个尺寸)。 我们将BorderLayout面板的首选大小设置为1024 x 768(即:指定GUI可以使用的大小),然后将该面板放入FlowLayout面板中(将保留首选大小)。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM