本文介绍了的paintComponent()与涂料()和JPanel的VS画布画笔型GUI的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我从this, this和员额(见最后发表的帖子有问题的GUI的code )。尽管如此,我还是挺困惑的一些事情。主要是,什么是显示用户介绍显卡的最便宜的方式。
更具体地说,我通过在这个类的一个对象使用从的JPanel
类的paintComponent()
方法与的paintComponent的
办法(的mouseDragged()
方法一起(的getGraphics()) AuxClass2
和 AuxClass1
相应地)。
显然,使用的getGraphics()
和的paintComponent()
而不是重绘()
是坏的想法,我怀疑是与内存使用。还呼吁用户拖动鼠标也是一个坏主意的 AuxClass2
每次。
另外的JPanel VS帆布(即摆动VS AWT)是有点混乱。用什么时候?
我一直试图找到一个解决方法,但还没有找到一个,尤其是对的getGraphics()
方法:还能怎么图形添加到面板?
解决方案
You remember what needs to be painted as a variable and use that in paintComponent().For example, what you seemed to be trying to do in your other question would look like:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class PaintRectangle extends JPanel {
private Point mouseLocation;
public PaintRectangle() {
setPreferredSize(new Dimension(500, 500));
MouseAdapter listener = new MouseAdapter() {
@Override
public void mousePressed(MouseEvent e) {
updateMouseRectangle(e);
}
private void updateMouseRectangle(MouseEvent e) {
mouseLocation = e.getPoint();
repaint();
}
@Override
public void mouseDragged(MouseEvent e) {
updateMouseRectangle(e);
}
@Override
public void mouseReleased(MouseEvent e) {
mouseLocation = null;
repaint();
}
};
addMouseListener(listener);
addMouseMotionListener(listener);
}
private Rectangle getRectangle() {
if(mouseLocation != null) {
return new Rectangle(mouseLocation.x - 5, mouseLocation.y - 5, 10, 10);
}
else {
return null;
}
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
Rectangle rectangle = getRectangle();
if(rectangle != null) {
Graphics2D gg = (Graphics2D) g;
gg.setColor(Color.BLUE);
gg.fill(rectangle);
gg.setColor(Color.BLACK);
gg.draw(rectangle);
}
}
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
JFrame frame = new JFrame("Test");
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
frame.getContentPane().add(new PaintRectangle());
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
});
}
}
See also http://docs.oracle.com/javase/tutorial/uiswing/painting/
这篇关于的paintComponent()与涂料()和JPanel的VS画布画笔型GUI的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!