【问题标题】:Zoom scaling a JPanel inside a JFrame缩放 JFrame 内的 JPanel
【发布时间】:2017-08-18 02:44:06
【问题描述】:

我在JFrame 中有一个JPanel,面板大小约为 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();

示例图片

现在怎么样了:

我希望如何调整它的大小:

【问题讨论】:

  • 引用了几种方法here。
  • “但是我的很多用户都使用 4k 显示器” - 不是这个可怜的用户 :(
  • 我可能建议的一个想法是设计一个“比例因子”的概念,您可以将其应用于您的事件处理程序和渲染,而不是简单地“缩放”看起来很可怕的图形(除非您缩小),这将允许您修改内容呈现的方式,并允许您为应用程序的所有部分提供统一的解决方案
  • 另一种解决方案可能是使用JLayer/JXLayer 之类的东西并允许它扩展您的程序,它还将为您的example 扩展输入事件。但是,我会先将您的应用设计为 4K @ 100%,然后在其他分辨率下按比例缩小

标签: java swing awt java-2d


【解决方案1】:

我认为没有简单的解决方案。为jframe注册一个resize监听器,根据窗口大小计算缩放因子,并使用这个缩放因子来改变jpanel中元素的大小和位置。

【讨论】:

    【解决方案2】:

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

    Graphics2D g2d = (Graphics2D) g;
    g2d.scale(scale, scale);
    

    比例是根据您的帧大小得出的。

    如果需要,可以使用 Frame 的 ComponentListener 并实现 componentResized 方法来获取 frame 的大小。

    【讨论】:

    • 请对代码和代码 sn-ps、HTML/XML 等结构化文档或输入/输出使用代码格式。为此,请选择文本并单击消息发布/编辑表单顶部的{} 按钮。
    • 想证明你也可以扩展事件
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-08-03
    • 2023-03-20
    • 2013-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多