gpt4 book ai didi

java - 借鉴Java重量级swing组件

转载 作者:行者123 更新时间:2023-11-30 05:15:55 26 4
gpt4 key购买 nike

我正在使用一个应用程序,其中我向 JFrame 添加了重量级(Canvas)。 Canvas 是第三方组件,因此我需要保持它的重量级。我想添加用户在 Canvas 上绘图并绘制选择矩形的功能。

我认为我不能用玻璃面板来做到这一点,因为重量级 Canvas 将显示在玻璃面板上。我尝试向 Canvas 添加鼠标监听器并直接在其图形上绘图,但这似乎会产生“闪烁”效果,因为它不是轻量级双缓冲组件。

有没有办法在重量级组件上实现这种平滑的绘制?

这是我目前在重量级组件的paint方法中的尝试,但是还是有闪烁的情况。

    @Override
public void paint(Graphics g)
{
super.paint(g);
if (showUserSelection)
{
Point startDrawPoint = new Point(Math.min(startSelectPoint.x,
endSelectPoint.x), Math.min(startSelectPoint.y,
endSelectPoint.y));
Point endDrawPoint = new Point(Math.max(startSelectPoint.x,
endSelectPoint.x), Math.max(startSelectPoint.y,
endSelectPoint.y));
int w = endDrawPoint.x - startDrawPoint.x;
int h = endDrawPoint.y - startDrawPoint.y;
if (w > 0 && h > 0)
{
BufferedImage img = new BufferedImage(w, h,
BufferedImage.TYPE_INT_ARGB);
Graphics2D imgGraphics = img.createGraphics();
imgGraphics.fillRect(0, 0, w, h);
g.drawImage(img, startDrawPoint.x, startDrawPoint.y, w, h,
null);

}
}
}

最佳答案

我不知道“Host AWT/SWT in Swing”组件有所下降,但您应该能够自己构建一个工作。

您是否考虑过自己实现双缓冲?

只需一眼,您的代码就已经完成了 90%。

@Override
public void paint(Graphics g)
{
BufferedImage buffer = new BufferedImage(COMPONENT_WIDTH, COMPONENT_HEIGHT, BufferedImage.TYPE_INT_ARGB);

Graphics bufferG = buffer.getGraphics();

super.paint(bufferG);
if (showUserSelection)
{
Point startDrawPoint = new Point(Math.min(startSelectPoint.x,
endSelectPoint.x), Math.min(startSelectPoint.y,
endSelectPoint.y));
Point endDrawPoint = new Point(Math.max(startSelectPoint.x,
endSelectPoint.x), Math.max(startSelectPoint.y,
endSelectPoint.y));
int w = endDrawPoint.x - startDrawPoint.x;
int h = endDrawPoint.y - startDrawPoint.y;
if (w > 0 && h > 0)
{
bufferG.fillRect(startDrawPoint.x, startDrawPoint.y, w, h);

}
}

g.drawImage(buffer, 0, 0, null);
}

关于java - 借鉴Java重量级swing组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1294915/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com