2015-08-14 20 views
5

Özel bir Düğmem var, bu iyi çalışıyor, hata yok. İşte Özel bileşenimi uygun şekilde nasıl özelleştirebilirim?

kodudur: Ben JFrame üzerinde YERE tıklayın Hiç bu söylediği zaman

İşte
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){ 
} 
} 

benim ana problem düğmesi tıklandığı, ancak sadece bir bölümünü eylem dinleyicisi üzerinde olmasını istediğiniz JFrame'de sahip olduğum mavi dikdörtgen. (Programımı çalıştırırsanız sorunum baş gösterecek) Bunu nasıl düzelteceğini bilen var mı? Okumak için zaman ayırdığınız için teşekkür ederiz :)

cevap

7

mousePressed yönteminizi değiştirin, böylece tıklatmanın Noktanın mavi dikdörtgenle çevrilip eklenmediğini kontrol edin. Basit bir blok ise ihtiyaç duyulan her şeydir. Not: Dikdörtgeninizi paintComponent içinde oluşturmayın. Sabit ise, bildirmek ve sınıfta oluşturmak için mousePressed yönteminde kullanılabilir. Ayrıca Rectangle2D, çok çok yardımcı olacak bir contains(...) yöntemine sahip olduğunu unutmayın. Ayrıca, MouseEvent'in çok çok yardımcı olacak bir getPoint() yöntemine sahip olduğunu unutmayın.

Ayrıca, düğmenizin boyutunu ayarlamak için, previous recent question numaralı telefondan bana göre tavsiye edilen getPreferredSize() yöntemini geçersiz kılın. Ayrıca, JFrame'inizde veya herhangi bir bileşende setSize() numaralı telefonu arayın. Ayrıca, pack() JFrame'inizi göstermeden önce.

+0

Teşekkürler, bu yöntemlerden herhangi birini bilmiyordum. Kabadan hala çözmem gereken küçük bir problemim var, ama bunu kendi kendime bırakacağım :) –

İlgili konular