- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试创建一个窗口框架来显示游戏窗口。我在 GameWindow
类中扩展了 JFrame
并创建了两个方法:drawBackground
(用实心矩形填充屏幕)和 drawGrid
,使用 for 循环绘制连续的线条以形成网格。这是我的代码。
public class GameWindow extends JFrame {
// instance variables, etc.
public GameWindow(int width, Color bgColor) {
super();
// ...
this.setVisible(true);
}
public void drawBackground() {
Graphics g = this.getGraphics();
g.setColor(bgColor);
g.fillRect(0, 0, this.getWidth(), this.getWidth());
// I suspect that the problem is here...
this.update(g);
this.revalidate();
this.repaint();
g.dispose();
}
public void drawGrid() {
Graphics g = this.getGraphics();
g.setColor(Color.BLACK);
for (int i = tileWidth; i < TILE_COUNT * tileWidth; i += tileWidth) {
g.drawLine(0, i * tileWidth, this.getWidth(), i * tileWidth);
g.drawLine(i * tileWidth, 0, i * tileWidth, this.getHeight());
}
// ... and here.
this.update(g);
this.revalidate();
this.repaint();
g.dispose();
}
}
但是,当我尝试在这样的程序中测试此类时:
public class Main {
public static void main(String[] args) {
GameWindow game = new GameWindow(700);
game.drawBackground();
game.drawGrid();
}
}
该框架出现在屏幕上,但保持空白;背景和网格都没有被绘制。我尝试将Graphics g = this.getGraphics()
改为this.getContentPane().getGraphics()
。我还尝试在 revalidate
、update
等的 drawBackground
和 drawGrid
中使用许多不同的组合和顺序。这些尝试似乎奏效了。我该如何解决这个问题?
最佳答案
嗯,Graphics g = this.getGraphics();
将是一个很好的起点。由于 repaint
只是安排使用 RepaintManager
进行绘制过程,因此所有使用 getGraphics
的代码都将被忽略。
这不是自定义绘画的工作原理。 getGraphics
可以返回 null
,并且最多是上一个绘制周期的快照,您在其中绘制的任何内容都将在下一个绘制周期中删除干净。
此外,不要处置
您未创建的Graphics
上下文,在某些系统上,这将阻止其他组件使用它
首先查看 Performing Custom Painting和 Painting in AWT and Swing更好地了解绘画的工作原理以及应该如何使用它。
您也可能想通读 Concurrency in Swing和 How to Use Swing Timers有关创建“主循环”以恒定速率更新 UI 的想法,因为 Swing 是单线程且不是线程安全的
关于java - 为什么JFrame的update、revalidate、repaint不更新窗口?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54340221/
在我的理解中,这两个指令都意味着缓存服务器将要求原始服务器重新验证来自客户端浏览器的请求。这两个指令有什么区别? 最佳答案 RFC 7234, section 5.2.2.7 , 解释: The "p
Cache-Control: no-cache 与 Cache-Control: max-age=0, must-revalidate, proxy-revalidate 的 HTTP 响应有什么区别
我经常用 Cache-Control: no-cache 或 Cache-Control: max-age=0 规范说must-revalidate是为了max-stale...(服务器问题max-s
因此,我编写了一段代码,在单击框架南部区域的按钮后,您会得到一个矩形。 但是由于这个原因,单击按钮后代码似乎不起作用 public void actionPerformed(ActionEvent e
我有一个主 JPanel、一个内部 JPanel 和一个用于内部 JPanel 的 JScrollPane mainPanel = new JPanel(); innerPanel = new JPa
我就遇到过这样的问题。当我在容器上调用 .revalidate 时,出现 IndexOutOfBoundsException。 我有一个 Runnable 类,它可以增加或减少组件的边距。我用它来制作
我正在尝试创建一个窗口框架来显示游戏窗口。我在 GameWindow 类中扩展了 JFrame 并创建了两个方法:drawBackground(用实心矩形填充屏幕)和 drawGrid,使用 for
**你好,我正在尝试用 java 创建一个存档器。这意味着我不断地从流中读取和写入。我希望能够更新 JProgressBar 以显示我已经写了多少。我的代码当前在存档中的每个条目之后更新进度栏。我的变
对于我的程序,我有一个 JPane,随着游戏的进行,它会向面板添加标签,但是我可以让面板显示的唯一方法是使用 add(label) 然后重新验证,反之亦然以删除标签。 我的问题是,一旦我在屏幕上有超过
我们正在使用Varnish缓存6.2来位于WebAPI后端的前面。 后端会在某些请求上向后发送一个缓存控制 header ,以便我们可以缓存更长的时间。 但是-如果后端出现故障并保持故障状态,我们将在
我正在尝试使Varnish与最后修改的 header 一起使用,但是无论我做什么,我的页面都会在120年代被缓存,并且Varnish永远不会使用后端进行验证。 我的后端正在发送这些 header :
我有这个 NextJS 站点,其中有从 Firestore 加载数据的 getStaticProps。 我有这个: return { props: { allPosts: post
我对java很陌生,我正在尝试创建我自己的拼字游戏。我创建了自己的 Board 类和 Tile 类 JPanel。当我在板上绘制图 block 时: Tile tile = new Tile(curr
Cloudflare 记录了 Cache-Control 的指令列表 header ,包括 stale-while-revalidate . stale-while-revalidate= When
网址:http://tinyurl.com/358lh6a 每当 DomainSelect(域扩展名)无论如何更改时,我都想重新验证宫殿地址(他们想要的域,形式是:名称)。 我尝试了一个简单的方法:
我在 JPanel 中有一个方法 private void paintScore(Graphics2D g) { Font scoreFont = new Font("Arial", Font
我正在组合一个 Swing 应用程序,我经常想在其中替换 JPanel 的内容。为此,我调用 removeAll(),然后添加我的新内容,然后调用 revalidate()。 但是,我发现旧内容实际上
本文整理了Java中org.knowm.xchart.XChartPanel.revalidate()方法的一些代码示例,展示了XChartPanel.revalidate()的具体用法。这些代码示例
如果应用中的购买调用 BillingClient.BillingResponseCode.ITEM_ALREADY_OWNED:需要调用 acknowledgePurchase(... 重新验证订单的
我在尝试查询表 AVC 时突然开始遇到此错误。 ORA-04045: errors during recompilation/revalidation of PUBLIC.AVC ORA-04098:
我是一名优秀的程序员,十分优秀!