如何将paintComponent(Graphics g)与MouseListener和MouseMotionListener结合起来
问题描述:
所以,我试图结合使用paintComponent()以及使用MouseListener和MouseActionListener,但是当我运行它时遇到了很多错误,它不工作,我想要它。在这段代码中,我希望程序在按下,拖动和释放按钮时,获取印刷机的坐标,然后测量版本的坐标,然后测量形状的大小,然后绘制指定的形状由JComboBox。我也有JFrame底部按钮的颜色选择器。我想知道我可以如何运行paintComponent()方法,而不需要它自动运行,所以我可以在绘制之前给它指定规格,并根据需要绘制它。另外,我想知道是否有另一种方法可以做到这一点,而且我对于如何接近它完全错误。 我希望解释不是太混乱:)。任何帮助都很好,谢谢!如何将paintComponent(Graphics g)与MouseListener和MouseMotionListener结合起来
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
@SuppressWarnings({"unchecked", "rawtypes"})
public class GraphicGUI extends JPanel implements ActionListener {
HandlerClass handler = new HandlerClass();
public int x1, x2, y1, y2, width, height;
public String event;
public JButton colorChooserButton;
public Color color = (Color.WHITE);
public JComboBox shapeBox;
public JLabel eventLabel;
public GraphicGUI(){
shapeBox = new JComboBox();
eventLabel = new JLabel();
colorChooserButton = new JButton("Choose a color");
colorChooserButton.addActionListener(this);
shapeBox.addItem("Oval");
shapeBox.addItem("Rectangle");
shapeBox.addItem("Line");
super.addMouseListener(handler);
super.addMouseMotionListener(handler);
}
public void actionPerformed(ActionEvent arg0){
if(arg0.getSource().equals(colorChooserButton)){
color = JColorChooser.showDialog(null, "Pick Your Color", color);
if(color==null){
color = (Color.BLACK);
}
}
}
public void paintComponent(Graphics g){
super.paintComponent(g);
this.setBackground(Color.white);
if(shapeBox.getSelectedItem() == "Oval")
if(event.equals("released")){
width = x1-x2;
height = y1-y2;
g.setColor(color);
g.fillOval(x1, y1, width, height);
}
}
private class HandlerClass implements MouseListener, MouseMotionListener{
//Mouse Events
public void mouseClicked(MouseEvent arg0){
event = "click";
}
public void mousePressed(MouseEvent arg0){
event = "pressed";
x1 = arg0.getX();
y1 = arg0.getY();
eventLabel.setText(String.format("Mouse pressed at %d, %d", x1, y1));
}
public void mouseReleased(MouseEvent arg0){
event = "released";
x2 = arg0.getX();
y2 = arg0.getY();
eventLabel.setText(String.format("Mouse released at %d, %d", x2, y2));
}
public void mouseEntered(MouseEvent arg0){
}
public void mouseExited(MouseEvent arg0){
}
//Mouse Motion Events
public void mouseDragged(MouseEvent arg0){
}
public void mouseMoved(MouseEvent arg0){
}
}
}
答
你应该画出形状来开始。
public void paintComponent(Graphics g){
//Draw the oval
g.setColor(color);
g.fillOval(x1, y1, width, height);
}
public void mouseReleased(MouseEvent arg0){
event = "released";
x2 = arg0.getX();
y2 = arg0.getY();
if(x2 > x1) {
width = x2-x1;
} else {
width = x1-x2;
}
if(y2 > y1) {
height = y2-y1;
} else {
height = y1-y2;
}
eventLabel.setText(String.format("Mouse released at %d, %d", x2, y2));
}
然后(如果你想添加更多的形状),您需要一种方法来添加形状(废话),因此你可以有形状的列表,并通过该列表进行迭代。
你真的应该(必须)初始化所有的变量。
询问您是否需要更多详细信息。 :)
你应该更确切地说你的代码现在正在做什么,即它崩溃,它是否画了一些东西等 – fstamour 2013-04-23 22:54:51