Прокрутить колесико мыши, чтобы добавить объектов - Java

Узнай цену своей работы

Формулировка задачи:

Доброе времени суток! У меня есть код, которая позволяет перемещать объектов с помощью мыши, но как бы сделать, чтобы с помощью прокрутки мыши, чтобы добавить ещё несколько объектов(MyLabel)?
package lab10;

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class Lab10{
    
    public static void main(String[] args){
        MyWindow window = new MyWindow();
        window.setVisible(true);
        window.setPreferredSize(new Dimension(800,600));
        window.pack();
        window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }
}
 
class MyWindow extends JFrame{
    public MyWindow(){
        super("Drag Test");
        Container container = getContentPane();
        container.setLayout(null);
 
        MyLabel label1 = new MyLabel("Mover 1");
        MyLabel label2 = new MyLabel("Mover 2");
        MyLabel label3 = new MyLabel("Mover 3");
        MyLabel label4 = new MyLabel("Mover 4");
        MyGrid g = new MyGrid();
        container.add(label1);
        container.add(label2);
        container.add(label3);
        container.add(label4);
        container.add(g,BorderLayout.CENTER);
        g.setPreferredSize(new Dimension(0,160));
        g.setBackground(Color.blue);
        
        label1.setOpaque(true);
        label1.setForeground(Color.white);
        label1.setBackground(Color.blue);
        label1.setBounds(20,10,100,50);
        label2.setOpaque(true);
        label2.setBackground(Color.white);
        label2.setBounds(140,10,100,50);
        label3.setOpaque(true);
        label3.setBackground(Color.green);
        label3.setBounds(20,140,100,50);
        label4.setOpaque(true);
        label4.setBackground(Color.yellow);
        label4.setBounds(140,140,100,50);
    }
}
 
class MyGrid extends JPanel{
    GridBagConstraints arr = new GridBagConstraints();
    private JLabel l1;
    JPanel panel = new JPanel();
    public MyGrid(){
        super();
        LayoutManager overlay = new OverlayLayout(panel);
        panel.setLayout(overlay);
        panel.setLayout(new GridBagLayout());
        arr.insets = new Insets(5,5,5,5);
        l1 = new JLabel("Hello");
        arr.gridx = 1;
        arr.gridy = 1;
        panel.add(l1,arr);
    }   
}

class MyLabel extends JLabel implements MouseMotionListener{
    public MyLabel(String text){
        super.setText(text);
        addMouseMotionListener(this);
    }
 
    public void mouseDragged(MouseEvent e){
        setLocation(this.getX()+e.getX()-this.getWidth()/2,this.getY()+e.getY()-this.getHeight()/2);
    }
    public void mouseMoved(MouseEvent e){
    }
}

Решение задачи: «Прокрутить колесико мыши, чтобы добавить объектов»

textual
Листинг программы
import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.event.MouseWheelEvent;
import java.awt.event.MouseWheelListener;
import java.util.ArrayList;
import java.util.List;
 
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
 
public class Start extends JFrame implements MouseWheelListener {
    List<JLabel> labels = new ArrayList<JLabel>();
    
    public Start() {
        super("This is my title");
        this.setSize(600, 400);
        this.setLocationRelativeTo(null);
        this.setDefaultCloseOperation(DISPOSE_ON_CLOSE);
 
        JPanel contentPane = (JPanel) this.getContentPane();
        contentPane.setLayout(new FlowLayout());
 
        this.addMouseWheelListener(this);
        this.setVisible(true);
    }
 
    public static void main(String[] args) {
        new Start();
    }
 
    @Override
    public void mouseWheelMoved(MouseWheelEvent e) {        
        JLabel label = null;
        
        if (0 < e.getWheelRotation()) {         
            label = new JLabel();
            
            this.add(label);
            
            label.setOpaque(true);
            label.setForeground(Color.white);
            label.setBackground(Color.blue);
            label.setBounds(100, 10, 100, 50);
            label.setText("Moved");
            
            labels.add(label);
        }       
        
        if (0 > e.getWheelRotation() && labels.size() !=0) {            
            label = labels.remove(labels.size() - 1);
            labels.remove(label);
            
            this.remove(label);         
            this.repaint();
        }       
    }
}

Оцени полезность:

14   голосов , оценка 3.929 из 5