我在重新绘制 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/