Pour une affectation de type hw, nous devions créer un bouton personnalisé afin de nous familiariser avec swing et de répondre aux événements. Nous devions aussi faire de ce bouton une source d'événement qui me déroute. J'ai une ArrayList pour garder une trace des écouteurs qui s'inscriraient pour écouter mon CustomButton. Ce que je suis confus est comment notifier les auditeurs. Mon professeur a suggéré d'avoir une notification et une action prioritaire que j'ai essayé de faire, mais je ne savais pas comment créer un objet ActionEvent en regardant la documentation du constructeur. La source, id, chaîne tout me confond. Toute aide serait appréciée.Création d'un objet ActionEvent pour CustomButton en Java
Code:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.util.List;
import java.util.ArrayList;
public class CustomButton
{
public static void main(String[] args)
{
EventQueue.invokeLater(new Runnable()
{
public void run()
{
CustomButtonFrame frame = new CustomButtonFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
});
}
public void addActionListener(ActionListener al)
{
listenerList.add(al);
}
public void removeActionListener(ActionListener al)
{
listenerList.remove(al);
}
public void actionPerformed(ActionEvent e)
{
System.out.println("Button Clicked!");
}
private void notifyListeners()
{
ActionEvent event = new ActionEvent(CONFUSED HERE!!!!;
for (ActionListener action : listenerList) {
action.actionPerfomed(event);
}
}
List<ActionListener> listenerList = new ArrayList<ActionListener>();
}
class CustomButtonFrame extends JFrame
{
// constructor for CustomButtonFrame
public CustomButtonFrame()
{
setTitle("Custom Button");
CustomButtonSetup buttonSetup = new CustomButtonSetup();
this.add(buttonSetup);
this.pack();
}
}
class CustomButtonSetup extends JComponent
{
public CustomButtonSetup()
{
ButtonAction buttonClicked = new ButtonAction();
this.addMouseListener(buttonClicked);
}
// because frame includes borders and insets, use this method
public Dimension getPreferredSize()
{
return new Dimension(200, 200);
}
public void paintComponent(Graphics g)
{
Graphics2D g2 = (Graphics2D) g;
// first triangle coords
int x[] = new int[TRIANGLE_SIDES];
int y[] = new int[TRIANGLE_SIDES];
x[0] = 0; y[0] = 0;
x[1] = 200; y[1] = 0;
x[2] = 0; y[2] = 200;
Polygon firstTriangle = new Polygon(x, y, TRIANGLE_SIDES);
// second triangle coords
x[0] = 0; y[0] = 200;
x[1] = 200; y[1] = 200;
x[2] = 200; y[2] = 0;
Polygon secondTriangle = new Polygon(x, y, TRIANGLE_SIDES);
g2.drawPolygon(firstTriangle);
g2.setColor(firstColor);
g2.fillPolygon(firstTriangle);
g2.drawPolygon(secondTriangle);
g2.setColor(secondColor);
g2.fillPolygon(secondTriangle);
// draw rectangle 10 pixels off border
int s1[] = new int[RECT_SIDES];
int s2[] = new int[RECT_SIDES];
s1[0] = 5; s2[0] = 5;
s1[1] = 195; s2[1] = 5;
s1[2] = 195; s2[2] = 195;
s1[3] = 5; s2[3] = 195;
Polygon rectangle = new Polygon(s1, s2, RECT_SIDES);
g2.drawPolygon(rectangle);
g2.setColor(thirdColor);
g2.fillPolygon(rectangle);
}
private class ButtonAction implements MouseListener {
public void mousePressed(MouseEvent e)
{
System.out.println("Click!");
firstColor = Color.GRAY;
secondColor = Color.WHITE;
repaint();
}
public void mouseReleased(MouseEvent e)
{
System.out.println("Released!");
firstColor = Color.WHITE;
secondColor = Color.GRAY;
repaint();
}
public void mouseEntered(MouseEvent e)
{}
public void mouseExited(MouseEvent e)
{}
public void mouseClicked(MouseEvent e)
{}
}
public static final int TRIANGLE_SIDES = 3;
public static final int RECT_SIDES = 4;
private Color firstColor = Color.WHITE;
private Color secondColor = Color.DARK_GRAY;
private Color thirdColor = Color.LIGHT_GRAY;
}
ActionEvent est une classe standard du paquet 'awt'. – Roman