在 Java Swing 中手动设置分辨率
Set resolution manually in Java Swing
我需要一种方法来手动 control/stretch 整个 GUI 的大小。
我有一个 1400 x 1050 的桌面(原始分辨率),我想在代码中手动将分辨率缩放到 1024 x 1050,因为我的应用程序是 on/for 一个 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?
..不幸的是,此处答案中的 link 不再起作用。
如何在 Java Swing 中手动设置分辨率?
如评论中所述,此处最好的方法是修复底层代码,使其不强制要求 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 添加到 BorderLayout
面板的 CENTER
(在没有任何组件的情况下,这将拉伸 GUI 以占据面板的整个大小) NORTH/SOUTH/EAST/WEST
)。我们将该 BorderLayout
面板的首选大小设置为 1024 x 768(IE:指定 GUI 工作的大小),然后将该面板送入 FlowLayout
面板(这将保留首选尺寸)。
结果是我们的 1400 x 1050 应用程序包含 1024 x 768 渲染的 GUI 组件(您可以通过修改包含 BorderLayout 的面板的首选大小轻松地将其更改为 1024 x 1050)。
作为对用户的练习,如果您 运行 这样做,您会注意到 GUI 代码没有垂直居中。这可以通过修改 content
面板的布局来解决。
我需要一种方法来手动 control/stretch 整个 GUI 的大小。
我有一个 1400 x 1050 的桌面(原始分辨率),我想在代码中手动将分辨率缩放到 1024 x 1050,因为我的应用程序是 on/for 一个 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?
..不幸的是,此处答案中的 link 不再起作用。
如何在 Java Swing 中手动设置分辨率?
如评论中所述,此处最好的方法是修复底层代码,使其不强制要求 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 添加到 BorderLayout
面板的 CENTER
(在没有任何组件的情况下,这将拉伸 GUI 以占据面板的整个大小) NORTH/SOUTH/EAST/WEST
)。我们将该 BorderLayout
面板的首选大小设置为 1024 x 768(IE:指定 GUI 工作的大小),然后将该面板送入 FlowLayout
面板(这将保留首选尺寸)。
结果是我们的 1400 x 1050 应用程序包含 1024 x 768 渲染的 GUI 组件(您可以通过修改包含 BorderLayout 的面板的首选大小轻松地将其更改为 1024 x 1050)。
作为对用户的练习,如果您 运行 这样做,您会注意到 GUI 代码没有垂直居中。这可以通过修改 content
面板的布局来解决。