java - 如何在 JFrame 中渲染一个面板

标签 java swing user-interface render bufferstrategy

我正在创建一个应用程序,如下图粗略地说明了有 3 个部分:顶部菜单 (JPanel)、侧边栏菜单(另一个 JPanel)和第三部分,我将其称为预览 Pane (黄色)部分)。预览 Pane 显示根据用户可以在侧边栏菜单中调整的参数(RGB 类型组件等)渲染的图案。

The layout of my application

由于此预览 Pane 必须在图案完成之前绘制多个形状,因此我使用 BufferStrategy 在显示图像之前准备图像。我尝试了很多不同的方法来实现这一点,并阅读了很多不同的意见是否使用 Canvas 作为我的预览 Pane ,因此已经从使用 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();
      }
    }
}

最佳答案

I'm using a BufferStrategy to prepare the image before showing it.

无需使用 BufferStrategy 来准备图像。 Swing 绘画速度足够快。

您正在尝试绘制 5 个椭圆形。可能会绘制数千个椭圆形,而您不会注意到性能问题。

只需点击上面 Gimby 给出的链接并使用标准 Swing 绘画即可。

如果您有兴趣,请查看Custom Painting Approaches这个示例展示了当用户手动添加矩形时如何在 JPanel 中动态绘制矩形。

关于java - 如何在 JFrame 中渲染一个面板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27819549/

相关文章:

java - 最欣赏的传输静态值的方式?

java - 为什么我得到列表中每个值的多次迭代

java - 在Jtree中转换字符串

Java游戏。子弹不会直接从 Guzzle 飞出

java - 从 jframe 上添加的 jpanel 类调用 jframe 中的函数

java - 使用 Swing 工具包构建 Java GUI

java - 为什么 graphics.drawString() 不重绘?

java - com.google.i18n.phonenumbers 错误?

java - 如何找到丢失的 jar ?

iphone - 您如何在 iOS 中组织您的 UI 设计变量、对象等?