为什么我的重绘不起作用?

2024-01-13

考虑到扩展了 Canvas 的 Display 类,我遇到了一个问题。 单个线程在同一个类中运行。 在这个线程中,调用了repaint方法。 然而,虽然线程工作正常,但油漆方法从未被调用!

这是我的代码(我遗漏了所有不相关的内容):

package display;

public final class Display extends Canvas implements Runnable {
private static final long serialVersionUID = 1L;

private Frame frame;

private GraphicsEnvironment ge;
private GraphicsDevice gd;

public BDisplay() {     
    ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
    gd = ge.getDefaultScreenDevice();

    frame = new Frame();

    //frame.setUndecorated(true);
    frame.setLocationRelativeTo(null);
    frame.setResizable(false);
    frame.setVisible(true);

    frame.add(this);

    frame.setLayout(null);

    //gd.setFullScreenWindow(frame);
}

@Override
public final void paint(Graphics g) {
    //THIS METHOD IS NEVER CALLED

    System.out.println("Paint method was called!");
    super.paint(g);

    //...
}

@Override
public synchronized void run() {
    while (isRunning()) {
        //THIS LOOP WORKS FINE.
        this.repaint();
    }
}
}

它与某些缺失的函数(例如 isRunning())无关。 它们存在,我只是把它们排除在外。

我以前从来没有遇到过这样的问题 虽然我已经有一段时间没有使用 SWING 或 AWT 做过任何事情了。

有人可以帮忙吗?

线程循环工作正常, 但重画似乎没有安排......


You're 实现 the JFrame在添加组件之前(即Canvas,以及之前的JPanel).

Try this

public BDisplay() {     
    ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
    gd = ge.getDefaultScreenDevice();

    frame = new Frame();
    frame.setResizable(false);
    frame.add(this);
    //frame.setLayout(null); // Why are you using a null layout?
    frame.pack();
    frame.setLocationRelativeTo(null);
    frame.setVisible(true);
}

EDIT

顺便说一句,我建议使用JPanel代替Canvas因为不建议您混合重型和轻型组件。有关更多详细信息,请参阅混合重组分和轻组分 http://www.oracle.com/technetwork/articles/java/mixing-components-433992.html.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么我的重绘不起作用? 的相关文章

随机推荐

  • 如何两两比较多次测量的增减?

    我有一个数据 我想通过取差值来两两比较测量值 如果差值大于 0 2 则添加另一列为 是 否则为 否 就像图像中的示例数据一样 并且 在每个人的最后 如果至少有一个 是 则最终结果为 是 我已手动填写第一行 但我想对我的所有个人 1000 个
  • Python 并删除列表列表中的重复项,无论列表中的顺序如何

    我已经搜索过 但没有找到与我相同的问题 我想从 python 中的列表列表中删除重复项 但是 我不在乎列表中值的顺序 我目前的做法太耗时了 我想做的事 A 1 2 3 2 3 4 3 4 5 3 2 4 我想搜索 A 并删除所有重复项 这里
  • 使用python同时向多个CC和多个TO收件人发送电子邮件

    分别尝试了多个 to 和多个 cc 效果很好 但是当我尝试两者时 出现错误 File 路径 Continuum anaconda2 envs mypython lib smtplib py 第 870 行 在 sendmail sender
  • std::string 用 bool 初始化

    考虑以下初始化 std string falseString false std string trueString true With g 5 2 0 编译器会抛出警告falseString 而错误为trueString With cla
  • 需要使用 R 从字符串列中提取单个字符

    背景 下面是我的gamedatadput 形式的数据集 它包含一些 MLB 比赛的比分 structure list team c NYM NYM BOS NYM BOS linescore c 010000000 10 1140006x
  • 如何在 Dhall 中将动态命名记录与静态记录合并?

    我正在 Dhall 中创建 AWS Step Function 定义 但是 我不知道如何创建他们使用的通用结构Choice如下例所示 Not Variable type StringEquals Private Next Public Th
  • 如何保存并添加游戏中获得的数值?

    我正在为我的游戏制作一个商店 我正在制作一个系统 我在游戏中获得的分数被保存 每次玩时它也会添加和保存 但这最后一部分不起作用我不知道为什么 我从另一个名为的脚本中获取一个变量score它收到我得到的值 并且必须将其添加到以前的值 但它不会
  • 如何计算销售范围内的排名

    如何计算销售级别定义的类别内的排名 假设我们希望将销售额高于某个阈值的产品标记为 高 类别 将低于该阈值的产品标记为 低 类别 这是一个示例数据 let Source Table FromRows Json Document Binary
  • 将 Vuetify 工具提示 (v-tooltip) 组件与外部激活器(即未包装)一起使用

    我了解如何使用 Vuetifyv 工具提示 https vuetifyjs com en components tooltips introduction工具提示包裹着组件 但是 我不太确定如何将激活按钮放在外面 例如我有这个 非工作代码
  • request.getServletPath() 从 Spring MVC 返回 null

    我做了一个过滤器来捕获HttpServletRequest所有请求的 servlet 路径 Override public void doFilter ServletRequest req ServletResponse res Filte
  • react-native-multiple-select 存储提交时选择的项目

    我正在使用react native multiple select并尝试创建一个下拉菜单 允许用户选择多个选项 然后将他们选择的选项记录到数组中 目前 我的代码是 onSelectedItemsChange selectedItems gt
  • 使用javascript检测设备CPU/GPU性能?

    这个问题并不特定于 Three js 但我会用它作为例子 我最近一直在使用 Three js 开发 Web 应用程序界面 并在 WebGL 和 Canvas 渲染器 针对桌面浏览器 之间编写了一些不错的后备程序 但现在的问题变成了如何正确检
  • C/C++ 中 \x 是什么意思?

    Example char arr xeb x2a BTW 以下内容相同吗 xeb x2a vs xeb x2a x表示十六进制字符转义 它用于指定不可输入的字符 例如 null x00 And xeb x2a 是一个文字字符串 类型是cha
  • git pull --rebase:传递 --rebase-merges

    这是我在重新调整当前分支的基础时通常会做的事情 同时防止本地分支变平 git fetch origin git rebase r origin develop r is rebase merges 我更喜欢 preserve merges
  • 从自定义键盘/谷歌键盘在 android 中的 Edittext 中插入图像/贴纸/gif

    我尝试使用 Google 键盘等键盘插入表情符号Gboard to my edittext但它显示吐司This text field does not support GIF insertion from the keyboard 有几个关
  • 如何将共享唯一 ID 的行合并到逗号分隔的表中

    我想请求一些关于如何将共享唯一 ID 的行合并到逗号分隔表中的提示 非常感谢 Perl sed 或 awk 中的任何提示 这就是我现在的表格的样子 protein id go id 4102 GO 0003676 4125 GO 00036
  • 如何在 R 中将数据移动两个月?

    我想将我的全部数据减少两个月 例如 如果我的数据从 1 月 1 日开始 我想以数据对应于 3 月 1 日的方式移动数据 同样 11 月数据将成为下一年 1 月数据 这是我的示例代码 DF lt data frame seq as Date
  • log4net RollingFileAppender 和 IIS 7.5

    我正在尝试在 IIS 7 5 Server 2008 R2 上将 log4net 与 RollingFileAppender 一起使用 然而 我的旧 IIS 6 Server 2003 盒子中的配置似乎不再起作用 我根本没有看到任何日志文件
  • 使用 Castle Windsor 为单个接口注册多个组件

    我正在尝试使用下面的代码注册多个 NHibernate ISession 多个数据库 我收到 已经为给定密钥 Castle MicroKernel Registration GenericFactory 1 NHibernate ISess
  • 为什么我的重绘不起作用?

    考虑到扩展了 Canvas 的 Display 类 我遇到了一个问题 单个线程在同一个类中运行 在这个线程中 调用了repaint方法 然而 虽然线程工作正常 但油漆方法从未被调用 这是我的代码 我遗漏了所有不相关的内容 package d