Java 缩放JFrame中的JPanel

Java 缩放JFrame中的JPanel,java,swing,awt,java-2d,Java,Swing,Awt,Java 2d,我有一个JPanel在JFrame里面,面板大约是500 x 500,基本上是一个非常依赖鼠标点击的游戏。然而,我的很多用户都使用4k显示器,游戏对他们来说非常小。因此,对于一个廉价的修复,我在想,当你放大框架时,我会如何缩放面板 下面是我现在的基本代码: UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); JPopupMenu.setDefaultLightWeightPopupEnabled(false);

我有一个
JPanel
JFrame
里面,面板大约是500 x 500,基本上是一个非常依赖鼠标点击的游戏。然而,我的很多用户都使用4k显示器,游戏对他们来说非常小。因此,对于一个廉价的修复,我在想,当你放大框架时,我会如何缩放面板

下面是我现在的基本代码:

UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
JPopupMenu.setDefaultLightWeightPopupEnabled(false);
frame.setLayout(new BorderLayout());
setFocusTraversalKeysEnabled(false);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

JPanel gamePanel = new JPanel();
gamePanel.setLayout(new BorderLayout());
gamePanel.add(this);
gamePanel.setPreferredSize(new Dimension(765, 503));

JMenuBar jmenubar = new JMenuBar();
frame.add(jmenubar); 
frame.getContentPane().add(gamePanel, BorderLayout.CENTER);
frame.pack();
frame.setVisible(true); // can see the client
frame.setResizable(true); // resizeable frame

init();
示例图片 现在情况如何:

我希望如何调整其大小:


我认为没有一个简单的解决办法。注册jframe的调整大小侦听器,根据窗口大小计算缩放因子,并使用此缩放因子更改jpanel中元素的大小和位置。

假设您已经为游戏面板实现了自定义绘图(覆盖paintComponent方法),您需要在自定义图形中使用缩放Graphics2D对象

Graphics2D g2d = (Graphics2D) g;
g2d.scale(scale, scale);
其中比例是根据帧大小导出的


如果需要,您可以使用Frame的ComponentListener并实现ComponentResistized方法来获得框架的大小。

引用了几种方法。“但是我的许多用户使用4k监视器”-而不是这个可怜的用户:(我可能建议的一个想法是设计一个“比例因子”的概念)您可以将其应用于事件处理程序和渲染,而不是简单地“缩放”图形,这样看起来会很糟糕(除非您缩小比例),这将允许您修改内容的呈现方式,并允许您为AppaLayer的所有部分提供统一的解决方案。另一种解决方案可能是使用类似于
JLayer
/
JXLayer
的东西,并允许它缩放您的程序,它还将缩放您的输入事件。但是,我将从设计开始你的应用程序将是4K@100%,然后以其他分辨率缩小。请对代码和代码片段、结构化文档(如HTML/XML或输入/输出)使用代码格式。为此,请选择文本并单击消息发布/编辑表单顶部的
{}
按钮。是否显示你也可以缩放事件