我正在创建一个应用程序,如下图粗略说明有 3 个部分:顶部菜单(JPanel)、侧边栏菜单(另一个 JPanel)和第三部分,我将其称为预览窗格(黄色部分)。预览窗格显示基于用户可以在侧边栏菜单中调整的参数(RGB 类型组件等)呈现的模式。
由于此预览窗格必须在图案完成之前绘制多个形状,因此我使用 BufferStrategy 在显示之前准备图像。我已经尝试了很多不同的方法来实现这一点,并阅读了很多不同的意见,是否将 Canvas 用于我的预览窗格,因此已经从使用 JPanel 到 Canvas 等来回发送,但无法得到这个与任何一个一起工作。实现我想要的最佳方式是什么?热衷于推荐好的资源/书籍。
这是我的精简代码,因此可以告诉我哪里出错了:
import java.awt.BorderLayout;
import java.awt.Canvas;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.image.BufferStrategy;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class FrameClass extends JFrame {
Thread t1;
public static void main(String[] args) {
FrameClass test = new FrameClass();
test.setup();
}
void setup() {
setPreferredSize(new Dimension(800, 800));
JPanel background = new JPanel(new BorderLayout());
getContentPane().add(background);
setVisible(true);
PatternCanvas shape = new PatternCanvas();
background.add(BorderLayout.CENTER, shape);
pack();
shape.repaint();
}
public class PatternCanvas extends Canvas {
BufferStrategy bs;
public void paintComponent(Graphics g) {
createBufferStrategy(2);
bs = getBufferStrategy();
System.out.println("have buffer strategy");
Graphics2D bufferG = (Graphics2D)bs.getDrawGraphics();
for (int i = 0; i < 5; i++) {
int width = 50;
int height = 50;
bufferG.setColor(new Color(i*5,i*6,i*50));
bufferG.fillOval(0, 0, width*i, height*i);
}
bufferG.dispose();
bs.show();
}
}
}