晚上好,
我创建了一个带有costum布局和JPanel的窗口。当我手动调整大小时,它会闪烁,因为Java会将JPanel绘制为false,以便在正确的位置再次绘制它。
我做了一个简短的示例程序,包括我的问题:
public class Starter {
private static TestWindow testWindow;
public static void main(String[] args) {
testWindow = new TestWindow();
}
}
import java.awt.Color;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class TestWindow {
private JFrame frame;
public TestWindow() {
frame = new JFrame();
frame.setBounds(100, 100, 765, 599);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
frame.setLayout(new OwnLayout());
JPanel pnl = new JPanel();
pnl.setBackground(Color.BLUE);
frame.add("", pnl);
}
}
import java.awt.Component;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.LayoutManager;
import javax.swing.JPanel;
public class OwnLayout implements LayoutManager {
JPanel pnl;
public OwnLayout() {
}
@Override
public void addLayoutComponent(String name, Component comp) {
pnl = (JPanel) comp;
}
@Override
public void layoutContainer(Container parent) {
if (pnl != null)
pnl.setBounds((int) parent.getWidth() - 50, 0, 50, (int) parent.getHeight());
}
@Override
public Dimension minimumLayoutSize(Container parent) {
return null;
}
@Override
public Dimension preferredLayoutSize(Container parent) {
return null;
}
@Override
public void removeLayoutComponent(Component comp) {
pnl = null;
}
}
拖动框架的左边框时,仅显示闪烁。 该问题可能链接到:
由于本机事件处理的异步性质,结果 由getBounds,getLocation,getLocationOnScreen和getSize返回 可能无法在屏幕上反映窗口的实际几何形状 最后一个请求已被处理。在处理过程中 后续请求这些值可能会相应地改变 窗口管理系统满足要求。
(引自https://docs.oracle.com/javase/7/docs/api/java/awt/Window.html)
我需要一个防止闪烁的解决方案。有没有人有想法?