繁体   English   中英

绘制、移动形状 In java Swing

[英]Draw, Move shapes In java Swing

我正在做一个关于在JPanel中绘制的形状移动的项目,但是如果我对我的mouselistener实施鼠标侦听器,如果我绘制了多个形状,我该怎么办? 在我的示例中,我绘制了两个矩形。 这是我的代码:

import javax.swing.BoxLayout;
import javax.swing.JFrame;
import static javax.swing.JFrame.EXIT_ON_CLOSE;
import javax.swing.JPanel;

public class NewClass1 extends JFrame{
        JPanel panel2;
        
    public NewClass1(){
        JPanel container = new JPanel();
        container.setLayout(new BoxLayout(container, BoxLayout.X_AXIS));
         panel2 = new jPanel2();

        container.add(panel2);
        
        add(container);
        setSize(300, 300);
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        setVisible(true);
    }

    public static void main(String[] args) {
        new NewClass1();
    }
    
    class jPanel2 extends JPanel {

    @Override
    public void paintComponent(Graphics g) {
        super.paintComponent(g);

        g.drawRect(0, 0, 20, 20);
        g.drawRect(21, 21, 20, 20);
    }}
}

java.awt.Rectangle class 可用于保存逻辑矩形。

我重新编写了您的代码并进行了以下更改。

  1. 我通过调用SwingUtilities invokeLater方法启动了 Swing 应用程序。 此方法确保在Event Dispatch Thread上创建和执行 Swing 个组件。

  2. 我创建了两个矩形并将其添加到List of Rectangles中。

  3. 必须按特定顺序调用JFrame方法。 这是我用于大多数 Swing 应用程序的顺序。

  4. 我给绘图JPanel一个首选大小,而不是JFrame 您想知道您的绘图区域有多大。 JFrame的大小与绘图无关。

    导入 java.awt.Color; 导入 java.awt.Dimension; 导入 java.awt.Graphics; 导入 java.awt.Rectangle; 导入 java.util.ArrayList; 导入 java.util.List;

    导入javax.swing.JFrame; 导入javax.swing.JPanel; 导入 javax.swing.SwingUtilities;

    公共 class ShapesExample 扩展 JFrame {

     private static final long serialVersionUID = 1L; private List<Rectangle> rectangles; public ShapesExample() { rectangles = new ArrayList<>(); rectangles.add(new Rectangle(10, 10, 20, 20)); rectangles.add(new Rectangle(41, 41, 20, 20)); setDefaultCloseOperation(EXIT_ON_CLOSE); setTitle("Shapes Example"); add(new DrawingPanel()); pack(); setLocationByPlatform(true); setVisible(true); } public static void main(String[] args) { SwingUtilities.invokeLater(new Runnable() { @Override public void run() { new ShapesExample(); } }); } class DrawingPanel extends JPanel { private static final long serialVersionUID = 1L; public DrawingPanel() { this.setPreferredSize(new Dimension(300, 300)); } @Override protected void paintComponent(Graphics g) { super.paintComponent(g); g.setColor(Color.RED); for (Rectangle rectangle: rectangles) { g.drawRect(rectangle.x, rectangle.y, rectangle.width, rectangle.height); } } }

    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM