Mam więc niestandardowy przycisk, który działa dobrze, bez błędów.Jak odpowiednio dostosować rozmiar niestandardowego komponentu?
Oto kod:
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){
}
}
Tu jest mój główny problem-gdy kiedykolwiek kliknij gdziekolwiek na JFrame, to mówi, że przycisk został kliknięty, ale tylko część Chcę mieć słuchacza działania na jest niebieski prostokąt, który mam na ramce JFrame. (Będziesz mógł znieść mój problem, jeśli uruchomisz mój program) Czy ktoś wie, jak to naprawić? Dziękujemy za poświęcenie czasu na przeczytanie :)
Dzięki, nie wiedziałem o żadnej z tych metod. Z grubsza mam jeszcze trochę problemów do rozwiązania, ale zostawię to sobie. –