覆盖图形内容的窗框

2023-12-11

这是我在这里发表的第一篇文章,我有一个看起来很菜鸟的问题,但这在过去一个小时左右一直困扰着我。

我正在制作一个简单的 JFrame,其中包含 JPanel,但 Windows 7 边框似乎挡住了我对面板部分内容的查看。例如,如果我在坐标 0,0 处画一个小正方形,它不会出现,我怀疑它在窗框后面。

我尝试过使用 pack、setsize、setpreferred size、setressized 和不同的布局,但我无法让它显示前 20 个像素左右!

这就是我所拥有的:

public RedSunGame() {
super("Red Sun");

rs = new JPanel(new BorderLayout(), true);
rs.setPreferredSize(new Dimension(WIDTH, HEIGHT));
add(rs, "Center");

setPreferredSize(new Dimension(WIDTH, HEIGHT));
pack();
setResizable(false);
setDefaultCloseOperation(EXIT_ON_CLOSE);
setVisible(true);
}

EDIT:

感谢您的所有回复,抱歉缺少信息:)

我正在使用我在书中看到的双缓冲区策略。 gameRender 和 PaintScreen 位于标准游戏循环中。我的 RedSunGame 类扩展了 JFrame。除上述之外,您可能需要的所有相关代码:

private static final int WIDTH = 500;
private static final int HEIGHT = 500;
private JPanel rs;
private Graphics2D g2d;
private Image dbImage;

private void gameRender() {
//create buffer
if (dbImage == null){
  dbImage = createImage(WIDTH, HEIGHT);
  g2d = (Graphics2D)dbImage.getGraphics();
}
//clear screen
g2d.setColor(Color.white);
g2d.fillRect(0, 0, WIDTH, HEIGHT);

g2d.setColor(Color.blue);
g2d.setFont(font);
g2d.drawString("FPS: " + FPS, 0, HEIGHT);
g2d.fillRect(30, 30, 10, 10);
}

private void paintScreen() {
Graphics g;
try {
  g = getGraphics();
  if ((g != null) && (dbImage != null))
    g.drawImage(dbImage, 0, 0, null);
  Toolkit.getDefaultToolkit().sync();
  g.dispose();
}
catch (Exception e)
{ System.out.println("Graphics context error: " + e);  }
}

根据我当前的设置,它看起来像这样。https://i.stack.imgur.com/lNhcq.png

如果我有 g2d.fillRect(30, 30, 10, 10),就会发生这种情况,唯一的变化是坐标 30,30 而不是 0,0。它肯定隐藏在顶部边框后面。https://i.stack.imgur.com/F5PSb.png

此外,将其设置为 BorderLayout.CENTER 似乎在任何这些情况下都没有什么区别。

(抱歉,新用户不允许发布图片)

EDIT:我想到了。我直接在 JFrame 上绘图。 @Guillaume Polet我明白为什么你不应该重写JFrames的paint方法,因为它绘制到框架而不是实际应该显示内容的面板!谢谢


这是一个示例代码,展示了如何实现您的目标。尝试找出代码的差异以找出问题所在:

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;

public class RedSunGame {

    private static final int SQUARE_SIZE = 20;
    private JPanel rs;
    private JFrame frame;

    private void initUI() {
        frame = new JFrame("Red Sun");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        rs = new JPanel(new BorderLayout()) {
            @Override
            protected void paintComponent(Graphics g) {
                super.paintComponent(g);
                g.setColor(Color.YELLOW);
                g.fillRect(0, 0, SQUARE_SIZE, SQUARE_SIZE);
            }

            @Override
            public Dimension getPreferredSize() {
                Dimension preferredSize = super.getPreferredSize();
                // Let's make sure that we have at least our little square size.
                preferredSize.width = Math.max(preferredSize.width, SQUARE_SIZE);
                preferredSize.height = Math.max(preferredSize.height, SQUARE_SIZE);
                return preferredSize;
            }
        };
        frame.add(rs);
        frame.pack();
        frame.setVisible(true);
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                RedSunGame redSunGame = new RedSunGame();
                redSunGame.initUI();
            }
        });
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

覆盖图形内容的窗框 的相关文章

随机推荐

  • 在android上使用smsManager.sendTextManager发送短信的问题

    我正在从我的应用程序向使用 5 位数手机号码的服务器发送一条短信 在 4 2 2 操作系统上 它会在下面弹出窗口询问我 Edited 问 如何处理取消 确定按钮 这应该有效 switch getResultCode if cancel pr
  • 删除目录中的所有文件和文件夹

    我想要一个批处理文件 该文件将删除我的无线工具包的缓存文件夹中的所有文件夹和文件 目前我有以下内容 cd C Users tbrollo j2mewtk 2 5 2 appdb RMS del db 这将删除我的所有 db 文件RMS目录
  • fwrite() 性能远低于磁盘容量

    我有一个动态分配的数组struct拥有 1700 万个元素 为了将其保存到磁盘 我写 fwrite StructList sizeof Struct NumStructs FilePointer 在稍后的步骤中 我用等效的内容阅读了它fre
  • 在 Tensorflow 中重用 LSTM 的重用变量

    我正在努力使RNN using LSTM 我做了LSTM模型 后面有两个DNN网络和一个回归输出层 我训练了我的数据 最终的训练损失约为0 009 然而 当我将模型应用于测试数据时 损失变为大约0 5 第 1 轮训练损失约为0 5 所以 我
  • Jquery 从文本中提取 URL

    我需要使用 jquery 从文本中提取 URL 可以说我在页面上的某个地方遵循文本区域代码
  • 多视图应用程序的knockoutjs模式示例[关闭]

    Closed 这个问题不符合堆栈溢出指南 目前不接受答案 我正在构建一个应用程序 其中包含两个复杂的 显着不同的 但具有一些共享组件 视图 一个视图允许用户运行查询并查看搜索结果 另一个视图提供最近活动的概述 相关示例可能是具有电子邮件屏幕
  • Android Studio-Java.exe 已完成,退出值非零 2

    当我尝试运行我的应用程序时 我收到此错误 Error Execution failed for task app dexDebug gt com android ide common process ProcessException org
  • 在 Ajax Adob​​e AIR 应用程序中与 API 共享机密

    我对开发 AIR 应用程序还很陌生 所以也许这是一个愚蠢的问题 但我似乎无法从 Google 找到任何答案 非常感谢您能给我的任何帮助 我正在使用 Ajax 构建一个 AIR 应用程序 使用的 API 与 flickr 的 API 相同 并
  • Google 地图地理编码(GLatLng 地址)

    我正在尝试使用 Google Maps JavaScript API 从两个位置绘制测地折线address点 var polyOptions geodesic true var polyline new GPolyline new GLat
  • 无法写入从两个压缩数据帧创建的 PySpark 数据帧

    我正在尝试跟随这里给出的例子用于组合两个数据框没有共享连接密钥 通过数据库表或 pandas 数据框中的 索引 进行组合 但 PySpark 没有该概念 My Code left df left df repartition right d
  • 安装了 Ruby on Rails,但是当我尝试运行 Rails Sever 时它没有加载 WEBrick?

    我今天在我的 mac 上安装了 Ruby on Rails 以及 Gems 和 MYsql 我正在尝试遵循 lynda com 教程 但遇到了困难 当我尝试运行 Rails 服务器时 由于某种原因它没有加载 WEBrick 这是我得到的错误
  • Pandas Dataframe - 根据两列找到最小值但大于0的行

    我有一个包含 3 列的数据框 x y 时间 有几千行 我想要做的是检索时间最短的行 但我希望最小值不应该为 0 e g x y time 240 1 28 5 240 2 19 3 240 240 0 240 19 9 7 到目前为止我已经
  • dyld:找不到符号:__TMPdCSs12AnyGenerator

    当我尝试构建并运行我的项目时 它给了我一个错误symbol not found TMPdCSs12AnyGenerator 我已经在我的系统上安装了 Xcode 7 beta 当我安装时它给我一个错误未找到领域模块所以我只是删除了领域框架
  • 如何对合并光标进行排序?

    任务是将来自 2 个具有相似列的不同表的数据组合起来 并按一列排序 看起来 MergeCursor 可能会有所帮助 但不知道如何对项目进行排序 我现在看到的唯一解决方案是手动转换为 ArrayAdapter 或者进行偷偷摸摸的 JOIN 尚
  • 为什么只允许UI线程修改UI?

    我知道 如果我从不同的线程修改控件 我应该小心 因为 WinForms 和 WPF 不允许从其他线程修改控件的状态 为什么会有这样的限制 如果我可以编写线程安全代码 我应该能够安全地修改控件状态 那么为什么会有这样的限制呢 一些 GUI 框
  • 如何获取从 FileProvider 类获取的图像文件的方向?

    背景 针对API 24或更高版本 开发人员需要使用FileProvider 或他们自己的ContentProvider 而不是使用简单的 Uri fromFile 命令 以便让其他应用程序访问该应用程序的文件 问题 我尝试使用以下代码打开相
  • MySQL 查询使用 JOIN 不使用 INDEX

    我在 MySQL 简化 中有以下两个表 clicks InnoDB 包含约 70 000 000 条记录 有一个索引date added column 有专栏link id它指的是记录links table links MyISAM 包含的
  • Jetty 9(嵌入式):在运行时添加处理程序

    有没有办法将处理程序添加到正在运行的嵌入式 Jetty 实例 我们已将旧的基于 Jetty 6 的项目迁移到 Jetty 9 我们的插件系统需要能够添加和删除动态处理程序 请参阅下面的示例 Server server new Server
  • IstIO 出口网关出现 HTTP 503 错误

    我有以下用于部署 IstIO 出口网关路由的清单 apiVersion networking istio io v1alpha3 kind ServiceEntry metadata name REDACTED egress se spec
  • 覆盖图形内容的窗框

    这是我在这里发表的第一篇文章 我有一个看起来很菜鸟的问题 但这在过去一个小时左右一直困扰着我 我正在制作一个简单的 JFrame 其中包含 JPanel 但 Windows 7 边框似乎挡住了我对面板部分内容的查看 例如 如果我在坐标 0