java - Java 中的 repaint() GUI 问题

标签 java user-interface jpanel graphics2d repaint

我在重新绘制 GUI 时遇到问题。我想在我的中心元素上用画笔画一些图画,但是当我拖动鼠标时,GUI 的所有元素都打印在我的中心元素上。您知道如何解决它吗?

我无法发布图片,所以有图片链接:/image/M8OOd.jpg

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.util.*;

public class PunsClient extends JFrame {

    //GUI
    private JButton polacz, rozlacz;
    private JPanel topPanel;
    private Painter painter;
    //Klient
    private String nazwaSerwera = "localhost";
    private Klient watekKlienta;
    private PunsClient instancjaKlienta;
    private Puns serwer;
    private ClientImpl klient;

    public PunsClient() {
        super("Klient");
        instancjaKlienta = this;
        setSize(700, 500); 
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
        setLayout(new BorderLayout());
        topPanel = new JPanel(new FlowLayout()); 
        painter = new Painter();
        polacz = new JButton("Połącz");
        rozlacz = new JButton("Rozłącz");
        rozlacz.setEnabled(false);


        addWindowListener(new WindowAdapter() {

            public void windowClosing(WindowEvent e) {
                rozlacz.doClick();
                setVisible(false);
                System.exit(0);
            }
        });

        topPanel.add(new JLabel("Serwer RMI: "));
        topPanel.add(host);
        topPanel.add(polacz);
        topPanel.add(rozlacz);

        add(topPanel, BorderLayout.NORTH);
        add(painter, BorderLayout.CENTER);
        add(wiadomosc, BorderLayout.SOUTH);
        setVisible(true);
    }

    public static void main(String[] args) {
        new PunsClient();

    }
}


import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class Painter extends JPanel {

    int xvalue = -10, yvalue = -10;

   public Painter() {  
      setPreferredSize(new Dimension(400, 400));
      addMouseMotionListener(new MouseMotionAdapter() {

          public void mouseDragged( MouseEvent event ) {
              xvalue = event.getX();
              yvalue = event.getY();
              repaint();
              }
          });
      }

   public void paint ( Graphics g ) {
       g.fillOval( xvalue, yvalue, 10, 10 );
    }
   }

最佳答案

自定义绘制是通过重写paintComponent(..)方法而不是paint()方法来完成的。

并且不要忘记调用 super.paintComponent() 作为 PaintComponent() 方法中的第一个语句。

阅读 Swing 教程中关于 Custom Painting 的部分了解更多信息和示例。

此外,如果您想进行增量绘画,那么您应该查看 Custom Painting Approaches在图像上绘制示例可能是您会使用的方法。

关于java - Java 中的 repaint() GUI 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23790228/

相关文章:

java - 对 MBean 进行版本控制的最佳方式?

java - spring中的ContextLoad错误

Python tkinter : Tab page with scroll bar

windows - 为什么 EM_SETMARGINS 在 Windows 7 下不起作用?

java - 在通过调整大小或操作重新绘制之前,JPanel 中的 JButton 无法正确显示

java - 如何从 maven java 项目加载外部属性文件

c# - Gui 异步操作模式?

java - 在 Swing 中更改 JScrollPane 高度

java - 使用 for 循环将 JPanel 添加到 JFrame

java - 将参数从 MainActivity.java 传递到我的 SQLiteOpenHelper 类中