2013-05-18 2 views
0

Как уловить события действия из компонента JPanel в родительском окне JFrame в Java Swing?Вывод событий действия из компонента JPanel в родительском окне JFrame

Мне тяжело пытаться создать пользовательский компонент в Swing.

Идея, которую я получил, заключается в создании пользовательского JPanel в Swing, который содержит JButton и захватывает действия над этими кнопками в родительском окне JFrame.

Я хотел бы применить метод addActionListener() к моей пользовательской JPanel, как если бы это была кнопка.

Должен ли я распространяться от JComponent вместо JPanel?

Я очень ценю вашу помощь и ваше время.

package pizzeria.interfaz; 

import java.awt.BorderLayout; 
import java.awt.Component; 
import java.awt.Container; 
import java.awt.Dimension; 
import java.awt.Toolkit; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 

import javax.swing.Box; 
import javax.swing.BoxLayout; 
import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.event.AncestorEvent; 
import javax.swing.event.AncestorListener; 

public class AplicacionCliente extends JFrame{ 

    public AplicacionCliente() { 

     Container contentPane = getContentPane(); 
     contentPane.setLayout(new BorderLayout()); 

     PanelMenu panelmenu = new PanelMenu(); //PanelMenu extends JPanel and has my buttons 


     JButton bot = new JButton("Prueba");   
     bot.addActionListener(new ActionListener(){ 

      @Override 
      public void actionPerformed(ActionEvent arg0) { 
       System.out.println("Botonazo!"); 

      }}); 


     contentPane.add(bot); 
     contentPane.add(panelmenu, BorderLayout.LINE_END); 

    } 
} 
+0

Для лучшей помощи раньше, опубликовать [SSCCE] (http://sscce.org/). –

+0

Не выдвигайте рамки или другие контейнеры верхнего уровня. Вместо этого создайте & используйте экземпляр одного. –

ответ

0

Почему вы хотите реализовать addActionListener вместо addMouseListener?

¿Por qué quieres implementar addActionListener ru vez de addMouseListener?

EDIT: проверить этот код, может работает

public class AplicacionCliente extends JFrame implements MouseListener{ 

public AplicacionCliente() { 

    Container contentPane = getContentPane(); 
    contentPane.setLayout(new BorderLayout()); 
    this.setVisible(true); 

    PanelMenu panelmenu = new PanelMenu(); //PanelMenu extends JPanel and has my buttons 


    JButton bot = new JButton("Prueba"); 
    bot.addMouseListener(this); 
    bot.setName("bot"); 

    contentPane.add(bot); 
    contentPane.add(panelmenu, BorderLayout.LINE_END); 

} 

@Override 
public void mouseClicked(MouseEvent e) { 
} 

@Override 
public void mousePressed(MouseEvent e) { 
    if(((JButton)e.getSource()).getName().compareToIgnoreCase("bot")==0){ 
     System.out.println("Botonazo!!"); 
    } 
} 

@Override 
public void mouseReleased(MouseEvent e) { 
} 

@Override 
public void mouseEntered(MouseEvent e) { 
} 

@Override 
public void mouseExited(MouseEvent e) { 
} 
+0

Привет, scgr, позвольте мне попробовать. Поэтому я мог бы получить нажатое имя кнопки или тег и добавить код для поведения кнопки, правильно? – Herman

+0

Это не работает, когда я нажимаю кнопки, ничего не происходит. – Herman

+0

Да, вы можете установить имя кнопки с именем 'bot.setName (« name »)', а затем проверить, нажала ли кнопка кнопку, которую вы хотите, используя 'getName()' из события – scgr