【问题标题】:How to render one panel in a JFrame如何在 JFrame 中渲染一个面板
【发布时间】:2015-03-05 08:28:28
【问题描述】:

我正在创建一个应用程序,如下图粗略说明有 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();
      }
    }
}

【问题讨论】:

  • 来自 Canvas 的 API 文档:“必须重写 paint 方法才能在画布上执行自定义图形。”你试过吗?
  • 这行得通,但我并不是要发布 Canvas 示例代码,因为使用带有 swing 的画布没有问题吗?
  • Canvas 是旧的 AWT 代码。如果您想在 Swing 中进行自定义绘画,那么请在 Swing 中进行自定义绘画。继承 JPanel 并覆盖其 paintComponent() 方法,如教程中所述:docs.oracle.com/javase/tutorial/uiswing/painting

标签: java swing user-interface render bufferstrategy


【解决方案1】:

我正在使用 BufferStrategy 在显示之前准备图像。

无需使用 BufferStrategy 来准备图像。摇摆绘画足够快。

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

只需按照上面 Gimby 提供的链接,使用标准的 Swing 绘画。

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

【讨论】:

  • 谢谢,但在实际应用中
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-23
  • 1970-01-01
  • 1970-01-01
  • 2022-10-14
  • 1970-01-01
  • 2012-12-21
  • 1970-01-01
相关资源
最近更新 更多