I'm trying to make an ActionListener
for a specific JComponent
, but in my code, there are two JComponent
s which have ActionListener
s.
Here's my code:
/**
* This is a Java Swing program that lets you play Minesweeper! Make sure to play it in fullscreen or else it's not going to work.
* @author Joshua Diocares
* @version JDK14.0
* @since Still in development!
*/
import java.awt.Color;
import java.awt.Cursor;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionAdapter;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JLayeredPane;
import javax.swing.JPanel;
/**
* A class that shows the xy coordinates near the mouse cursor.
*/
class AlsXYMouseLabelComponent extends JComponent {
public int x;
public int y;
/**
* Uses the xy coordinates to update the mouse cursor label.
*/
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
String coordinates = x + ", " + y; // Get the cordinates of the mouse
g.setColor(Color.red);
g.drawString(coordinates, x, y); // Display the coordinates of the mouse
}
}
public class Minesweeper implements ActionListener {
private static JComboBox < String > gameModeDropdown;
private static JComboBox < String > difficultyDropdown;
public static void main(String[] args) {
JPanel panel = new JPanel();
JFrame frame = new JFrame();
frame = new JFrame();
frame.setSize(1365, 767);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setTitle("Tic Tac Toe");
frame.setCursor(new Cursor(Cursor.CROSSHAIR_CURSOR));
frame.setVisible(true);
frame.add(panel);
panel.setLayout(null);
AlsXYMouseLabelComponent alsXYMouseLabel = new AlsXYMouseLabelComponent();
/**
* Add the component to the DRAG_LAYER of the layered pane (JLayeredPane)
*/
JLayeredPane layeredPane = frame.getRootPane().getLayeredPane();
layeredPane.add(alsXYMouseLabel, JLayeredPane.DRAG_LAYER);
alsXYMouseLabel.setBounds(0, 0, frame.getWidth(), frame.getHeight());
/**
* Add a mouse motion listener, and update the crosshair mouse cursor with the xy coordinates as the user moves the mouse
*/
frame.addMouseMotionListener(new MouseMotionAdapter() {
/**
* Detects when the mouse moved and what the mouse's coordinates are.
* @param event the event that happens when the mouse is moving.
*/
@Override
public void mouseMoved(MouseEvent event) {
alsXYMouseLabel.x = event.getX();
alsXYMouseLabel.y = event.getY();
alsXYMouseLabel.repaint();
}
});
JLabel title = new JLabel("Minesweeper");
title.setBounds(500, 100, 550, 60);
title.setFont(new Font("Verdana", Font.PLAIN, 50));
panel.add(title);
JLabel gameModePrompt = new JLabel("Game Mode: ");
gameModePrompt.setBounds(280, 335, 300, 25);
gameModePrompt.setFont(new Font("Verdana", Font.PLAIN, 20));
panel.add(gameModePrompt);
String[] gameModes = {
"Normal"
};
JComboBox < String > gameModeDropdown = new JComboBox < String > (gameModes);
gameModeDropdown.setBounds(415, 335, 290, 25);
gameModeDropdown.setFont(new Font("Verdana", Font.PLAIN, 20));
gameModeDropdown.addActionListener(new Minesweeper());
panel.add(gameModeDropdown);
JLabel difficultyPrompt = new JLabel("Difficulty: ");
difficultyPrompt.setBounds(800, 335, 240, 25);
difficultyPrompt.setFont(new Font("Verdana", Font.PLAIN, 20));
panel.add(difficultyPrompt);
String[] difficulties = {
"Medium"
};
JComboBox < String > difficultyDropdown = new JComboBox < String > (difficulties);
difficultyDropdown.setBounds(910, 335, 120, 25);
difficultyDropdown.setFont(new Font("Verdana", Font.PLAIN, 20));
panel.add(difficultyDropdown);
JButton playButton = new JButton("Play");
playButton.setBounds(530, 480, 220, 25);
playButton.setFont(new Font("Verdana", Font.PLAIN, 20));
playButton.addActionListener(new Minesweeper());
panel.add(playButton);
}
@Override
public void actionPerformed(ActionEvent e) {
}
}
Any suggestions would be really helpful