如何解决单击按钮在面板中绘制一个可调整大小的矩形
我是 Java Swing 的新手。我试图在面板中绘制一个可调整大小的矩形,就好像我点击了一个红色按钮一样,它应该在红色面板中绘制一个可调整大小的矩形,绿色按钮和蓝色按钮也是如此,但动作侦听器有效,形状没有在面板中显示
以下是可调整大小的组件类
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.awt.geom.Rectangle2D;
// it is resizable component code
class ResizableComponent extends JPanel {
private int SIZE = 8;
private Rectangle2D[] points = {new Rectangle2D.Double(50,50,SIZE,SIZE),new Rectangle2D.Double(150,100,SIZE)};
Rectangle2D s = new Rectangle2D.Double();
ShapeResizeHandler ada = new ShapeResizeHandler();
public ResizableComponent() {
addMouseListener(ada);
addMouseMotionListener(ada);
}
public void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2 = (Graphics2D) g;
for (int i = 0; i < points.length; i++) {
g2.fill(points[i]);
}
s.setRect(points[0].getCenterX(),points[0].getCenterY(),Math.abs(points[1].getCenterX() - points[0].getCenterX()),Math.abs(points[1].getCenterY() - points[0].getCenterY()));
g2.draw(s);
}
class ShapeResizeHandler extends MouseAdapter {
Rectangle2D r = new Rectangle2D.Double(0,SIZE);
private int pos = -1;
public void mousepressed(MouseEvent event) {
Point p = event.getPoint();
for (int i = 0; i < points.length; i++) {
if (points[i].contains(p)) {
pos = i;
return;
}
}
}
public void mouseReleased(MouseEvent event) {
pos = -1;
}
public void mouseDragged(MouseEvent event) {
if (pos == -1) {
return;
}
points[pos].setRect(event.getPoint().x,event.getPoint().y,points[pos].getWidth(),points[pos].getHeight());
System.out.println("x : " + event.getPoint().x);
System.out.println("y : " + event.getPoint().y);
System.out.println("w : " + points[pos].getWidth());
System.out.println("h : " + points[pos].getHeight());
repaint();
}
}
}
以下是绘制框架和面板的绘图类
public class Drawing extends JFrame{
public static void main(String[] args) {
Drawing d= new Drawing();
d.setSize(1000,800);
d.setDefaultCloSEOperation(JFrame.EXIT_ON_CLOSE);
d.setVisible(true);
d.setLayout(null);
JPanel redPanel = new JPanel();
redPanel.setBounds(0,300,700);
redPanel.setBackground(Color.red);
JPanel greenPanel = new JPanel();
greenPanel.setBounds(300,400,700);
greenPanel.setBackground(Color.green);
JPanel bluePanel = new JPanel();
bluePanel.setBounds(700,700);
bluePanel.setBackground(Color.blue);
JPanel yellowPanel = new JPanel();
yellowPanel.setBounds(0,700,1000,100);
yellowPanel.setBackground(Color.yellow);
JTextField tf =new JTextField("Default",30);
tf.setEditable(false);
JButton redButton = new JButton("red");
JButton greenButton = new JButton("Green");
JButton blueButton = new JButton("Blue");
yellowPanel.add(tf);
yellowPanel.add(redButton);
yellowPanel.add(greenButton);
yellowPanel.add(blueButton);
d.add(redPanel);
d.add(greenPanel);
d.add(bluePanel);
d.add(yellowPanel);
redButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
redPanel.add(new ResizableComponent());
redPanel.repaint();
String s = e.getActionCommand();
System.out.println(s + " Clicked");
}
});
greenButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
greenPanel.add(new ResizableComponent());
greenPanel.repaint();
String s = e.getActionCommand();
System.out.println(s + " Clicked");
}
});
blueButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
bluePanel.add(new ResizableComponent());
bluePanel.repaint();
String s = e.getActionCommand();
System.out.println(s + " Clicked");
}
});
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。