Quindi ho un pulsante personalizzato, che funziona bene, senza errori.Come posso dimensionare il mio componente personalizzato in modo appropriato?
Ecco il codice:
import java.awt.*;
import java.awt.event.*;
import java.awt.geom.*;
import java.util.ArrayList;
import javax.swing.JButton;
import javax.swing.JComponent;
import javax.swing.JFrame;
public class LukeButton extends JComponent implements MouseListener{
public static void main(String[] args){
JFrame frame = new JFrame();
frame.setTitle("Luke");
frame.setSize(300, 300);
frame.setLocationRelativeTo(null);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
LukeButton lb = new LukeButton();
lb.addActionListener(e->{
System.out.println("Success");
});
frame.add(lb, BorderLayout.CENTER);
frame.setVisible(true);
}
//ArrayList of listeners
private final ArrayList<ActionListener> listeners = new ArrayList<ActionListener>();
public LukeButton(){
this.addMouseListener(this);
}
//Adds a listeners to the list
public void addActionListener(ActionListener e){
listeners.add(e);
}
//Called when button is provoked
public void fireActionListeners(){
if(!listeners.isEmpty()){
ActionEvent evt = new ActionEvent(this, ActionEvent.ACTION_PERFORMED, "LukeButton");
for(ActionListener l: listeners){
l.actionPerformed(evt);
}
}
}
//Listens for click on my component
public void mousePressed(MouseEvent e){
fireActionListeners();
}
public Dimension getPreferredSize(){
return new Dimension(100, 100);
}
//Draws my button
public void paintComponent(Graphics g){
super.paintComponent(g);
Graphics2D g2 = (Graphics2D)g;
Shape rec = new Rectangle2D.Float(10, 10, 60, 80);
g2.setColor(Color.BLACK);
g2.setStroke(new BasicStroke(5));
g2.draw(rec);
g2.setColor(Color.BLUE);
g2.fill(rec);
}
//Methods that must be over written.
public void mouseClicked(MouseEvent e){
}
public void mouseEntered(MouseEvent e){
}
public void mouseExited(MouseEvent e){
}
public void mouseReleased(MouseEvent e){
}
}
Ecco il mio problema-principale quando mai clicco ovunque sul JFrame, si dice è stato fatto clic sul pulsante, ma l'unica parte che voglio avere l'ascoltatore azione su è il rettangolo blu che ho sulla JFrame. (Avrai sotto il mio problema se si esegue il mio programma) Qualcuno sa come risolvere questo problema? Grazie per aver dedicato del tempo a leggere :)
Grazie, non sapevo di nessuno di questi metodi. Di grossolane ho ancora un piccolo problema da risolvere, ma lo lascerò a me stesso :) –