【问题标题】:Java Swing rendering Issue (Empty spaces & doubled rendering) [closed]Java Swing 渲染问题(空白空间和双重渲染)[关闭]
【发布时间】:2021-09-09 15:50:03
【问题描述】:

我对 java swing 的 JFrame / JPanel 有一点渲染问题。 我想在自己身上渲染一条线,所以我创建了一种方法来使用 Graphics g 渲染许多点,并且它工作得很好(在我的第二台显示器上)。 现在我正在使用我的主要笔记本电脑显示器,我得到了诅咒的东西: Rendering Issue

它应该只是一条连续的线,但它有这些令人讨厌的小间隙,并且显示了两次......这不会发生在我的另一台(更大)显示器上,但我想那不应该是这样的(它只是与一些人一起工作监视器)。所以代码很好(我猜),我的显示器也...... :-你能帮我吗? 谢谢大家回答:)

CODE ON PASTEBIN:

https://pastebin.com/kBVSjpCA
https://pastebin.com/svuhSXGw
https://pastebin.com/ftga7v2L
https://pastebin.com/fHtYj35G
https://pastebin.com/zA0N1LqE

【问题讨论】:

  • 没有您的代码,我们永远无法知道问题所在。创建minimal reproducible example,社区将能够为您提供帮助。
  • 可用的 pastebin 代码...帖子中的链接 :)
  • minimal reproducible example 应该与问题一起发布,而不是在 pastebin 上。代码应该在一个类中,我们可以复制/粘贴/编译和测试,就像下面 Gilbert 的示例一样。

标签: java swing jframe rendering


【解决方案1】:

Oracle 有一个很棒的教程,Creating a GUI With Swing。跳过 Netbeans 部分。教程中涉及自定义绘图的部分是Performing Custom Painting

这是我为之前的问题准备的一个 Swing 绘图示例。

总体思路是创建一个JFrame,并创建一个单独的绘图JPanel。绘图JPanel 将扩展JPanel 并覆盖paintComponent 方法。

paintComponent 方法的第一行必须是对super paintComponent 方法的调用。之后,您可以使用任何您想要的GraphicsGraphics2D 方法。

这是完整的可运行代码。

import java.awt.Dimension;
import java.awt.Graphics;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;

public class DrawingPanelExample implements Runnable {

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new DrawingPanelExample());
    }

    @Override
    public void run() {
        JFrame frame = new JFrame("My Empty Window");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        DrawingPanel panel = new DrawingPanel();
        frame.add(panel);

        frame.pack();
        frame.setLocationByPlatform(true);
        frame.setVisible(true);
    }

    public class DrawingPanel extends JPanel {

        private static final long serialVersionUID = 1L;

        public DrawingPanel() {
            this.setPreferredSize(new Dimension(350, 300));
        }

        @Override
        protected void paintComponent(Graphics pen) {
            super.paintComponent(pen);

            pen.drawRect(50, 50, 20, 20);
            pen.drawRect(100, 50, 40, 20);
            pen.drawOval(200, 50, 20, 20);
            pen.drawOval(250, 50, 40, 20);
            pen.drawString("Square", 50, 90);
            pen.drawString("Rectangle", 100, 90);
            pen.drawString("Circle", 200, 90);
            pen.drawString("Oval", 250, 90);
            pen.fillRect(50, 100, 20, 20);
            pen.fillRect(100, 100, 40, 20);
            pen.fillOval(200, 100, 20, 20);
            pen.fillOval(250, 100, 40, 20);
            pen.drawLine(50, 150, 300, 150);
            pen.drawArc(50, 150, 200, 100, 0, 180);
            pen.fillArc(100, 175, 200, 75, 90, 45);
        }
        
    }

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-12-08
    • 2022-08-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多