Java-用鼠标绘制形状并在单击按钮后拖动
我希望在不使用JComponent的情况下执行此操作。其想法是为每个形状都有多个按钮,通过单击一个按钮,我可以为该按钮绘制形状。不幸的是,我现在连形状都画不出来Java-用鼠标绘制形状并在单击按钮后拖动,java,swing,user-interface,button,mouselistener,Java,Swing,User Interface,Button,Mouselistener,我希望在不使用JComponent的情况下执行此操作。其想法是为每个形状都有多个按钮,通过单击一个按钮,我可以为该按钮绘制形状。不幸的是,我现在连形状都画不出来 public static void main(String[] args) { JFrame frame = new JFrame(); JButton rect = new JButton("Rectangle"); ActionListener rListener = new RectangleNode()
public static void main(String[] args) {
JFrame frame = new JFrame();
JButton rect = new JButton("Rectangle");
ActionListener rListener = new RectangleNode();
rect.addActionListener(rListener);
MouseListener rMListener = new RectangleNode();
rect.addMouseListener(rMListener);
MouseMotionListener rMMListener = new RectangleNode();
rect.addMouseMotionListener(rMMListener);
JButton ellipse = new JButton("Ellipse");
JPanel panel = new JPanel();
panel.add(rect);
panel.add(ellipse);
frame.add(panel);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(600, 600);
frame.setTitle("Graph Draw");
frame.setVisible(true);
}
矩形节点类
public class RectangleNode implements ActionListener,MouseListener,MouseMotionListener {
private Point p1;
private Rectangle r;
private boolean rdraw;
@Override
public void actionPerformed(ActionEvent e) {
rdraw = true;
}
@Override
public void mousePressed(MouseEvent e) {
if(rdraw = true){
p1 = e.getPoint();
r = new Rectangle(p1.x, p1.y, p1.x - p1.x, p1.y - p1.y);
}
}
@Override
public void mouseReleased(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mouseDragged(MouseEvent e) {
if(rdraw = true){
int x = Math.min(p1.x, e.getX());
int y = Math.min(p1.y, e.getY());
int width = Math.abs(p1.x - e.getX());
int height = Math.abs(p1.y - e.getY());
r.setBounds(x, y, width, height);
repaint();
}
}
@Override
public void mouseMoved(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mouseClicked(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mouseEntered(MouseEvent e) {
TODO Auto-generated method stub
}
@Override
public void mouseExited(MouseEvent e) {
// TODO Auto-generated method stub
}
public void paintComponent(Graphics g) {
Graphics2D g2 = (Graphics2D)g;
g2.draw(r); ;
}
}
我不知道在这种情况下如何使用重绘和paintComponent方法。查看如何动态绘制矩形的示例
在您的情况下,您希望能够绘制矩形或椭圆,因此需要进行一些更改:
无论如何,请使用原始代码了解其工作原理。首先,将代码转换为仅对矩形使用ColoredShape类。然后,一旦成功,您就可以添加对椭圆的支持。
“…不使用JComponent”
——也不使用JPanel?您似乎在为绘图目的向JButton添加鼠标侦听器,这很抱歉,但毫无意义。您需要做的是创建一个扩展JPanel
的绘图类,并将您的MouseListener和MouseMotionListener添加到该类中,正如任何教程所示,本网站上的许多示例都将向您展示。没有更多关于你的人为约束的信息,我不知道如何帮助你。请向我们提供有关此约束和您的问题的更多信息。“我不确定在这种情况下如何使用重新绘制和paintComponent方法”
--如果不扩展JPanel或JComponent,您就无法使用。“…如果不使用JComponent”
——如果不使用JPanel,您似乎在为绘图目的向JButton添加鼠标侦听器,这很抱歉,但毫无意义。您需要做的是创建一个扩展JPanel
的绘图类,并将您的MouseListener和MouseMotionListener添加到该类中,正如任何教程所示,本网站上的许多示例都将向您展示。没有更多关于你的人为约束的信息,我不知道如何帮助你。请向我们提供有关此约束和您的问题的更多信息。“我不确定在这种情况下如何使用重绘和paintComponent方法”
——如果不扩展JPanel或JComponent,您就无法使用。