请注意,我尚未在Windows计算机上仅在Mac计算机上对此进行测试。 我不确定这是否也会在Windows计算机上发生…
当我调整Java应用程序的大小时,内容是不可见的。我已经找到一种方法来解决它 后 调整其大小,但不能 同时 在用户调整窗口的大小。
我没有使用Swing之类的东西,因为它会使我的二进制文件变慢(我认为)。
结构是这样的:
Frame
Containe
main-window
Container
paint(Graphics g)
我已将所有侦听器添加到其中 My main-window ,现在可以 在* 调整窗口大小 后 重新绘制 Content-view 。 *
My main-window
public void componentResized(ComponentEvent e) { this.contentView.paint(this.contentView.getGraphics()); }
我谨防使用paint(getGraphics())-method并不是执行此操作的好方法,但是由于repaint()-method根本不执行任何操作,因此这是唯一可行的方法。
paint(getGraphics())
repaint()
调整大小时,所有绘制的内容将变得不可见。但是,当我Button向自己添加-instance Content-view 并调整其大小时 Main-window ,按钮不会变得不可见。
Button
Content-view
Main-window
我 是 能够追踪“live’-resize事件:
public void componentMoved(ComponentEvent e) { System.out.println("Live-resize"); }
当我将这样的重绘方法(或正式的重绘方法)添加到像这样的“实时”调整大小事件中时,我仍然会得到输出,但是,它没有进行重绘
public void componentMoved(ComponentEvent e) { System.out.println("Live-resize"); this.contentView.paint(this.contentView.getGraphics()); }
要么
public void componentMoved(ComponentEvent e) { System.out.println("Live-resize"); this.contentView.repaint(); }
当我将我的应用程序最小化到扩展坞并再次最大化应用程序时,会发生相同的事情,我猜想需要使用相同的代码来解决此问题。
我没有使用Graphics2D,什么也没有Graphics。
Graphics2D
Graphics
您能否解释一下如何重绘视图?
预先感谢,蒂姆
好的,我终于解决了。
无需每次都在paint(Graphics g)-method 中重绘它,而是需要缓冲输出并仅重绘该图像(我有点希望Java像Obj- C一样已经这样做了)。
public BufferedImage buffer; public void redraw() { buffer = new BufferedImage( 200, // height 300, // width BufferedImage.TYPE_4BYTE_ABGR); // ABGR = RGBA, 4-byte (r, g, b, a) per pixel Graphics g = buffer.getGraphics(); // do your drawing here if (this.getGraphics()) { // 'this' is already shown, so it needs a redraw this.paint(this.getGraphics()); // little hack } } public void update(Graphics g) { this.paint(g); } public void paint(Graphics g) { g.drawImage(buffer, 0, 0, this); }
现在,当您最小化窗口并再次最大化它时,画作仍然存在。只是,窗口现在闪烁了0.1秒左右,但我并不在乎。