2013-12-14 4 views
0

У меня есть JButton и хотите на событии вызывать этот класс метод шоу() когда эта кнопка нажата. Я знаю, как это сделать, если я хочу использовать метод из другого класса, но мне нужен метод вызова из того же класса, что и кнопка.Событие Swing JButton

JButton search = new JButton(new ButtonAction("Search", KeyEvent.VK_A)); 

Я пытаюсь добавить

JButton search = new JButton(show()); 

Но это работает только 1 раз при создании объекта, но не при нажатии кнопки.

+1

1) Пожалуйста, не забудьте добавить '?' на вопросы! Некоторые люди выполняют поиск на странице «?» и если ни один из них не существует в «вопросе», переходите непосредственно к следующему (фактическому) вопросу в очереди. 2) Чтобы получить более эффективную помощь, опубликуйте [SSCCE] (http://sscce.org/). 3) Нет необходимости добавлять основной тег в заголовок. –

+1

Извинения: но ваш вопрос не имеет никакого смысла: 'want on event call this class method show(), когда эта кнопка нажата', почему вы передаете функцию' show() 'что это возвращает тип? какую функцию следует вызывать слушателям событий событий? – Sage

+0

@Sage Я хочу вызвать 'show()' из того же класса – Wizard

ответ

1

Не знаете, что вы хотите здесь ... но если вы хотите прикрепить actionListener() к JButton, вы можете сделать следующее. Зачем вам нужно слушать A?

import java.awt.*; 
import java.awt.event.*; 
import javax.swing.*; 

public class ActionListenerExample1 extends JFrame 
     implements ActionListener, KeyListener { 
    private static final long serialVersionUID = 1L; 

    private JTextField searchText; 
    private JButton searchButton1; 
    private JButton searchButton2; 

    public ActionListenerExample1() { 
     initialize(); 

     this.pack(); 
     this.setLocationRelativeTo(null); 
     this.setVisible(true); 
     this.setDefaultCloseOperation(EXIT_ON_CLOSE); 
    } 

    protected void initialize() { 
     searchText = new JTextField(30); 
     searchButton1 = new JButton("Search 1"); 
     searchButton2 = new JButton("Search 2"); 

     searchText.addKeyListener(this); 
     searchButton1.addActionListener(this); 
     searchButton2.addActionListener(new ButtonAction()); 

     this.setLayout(new FlowLayout()); 
     this.add(searchText); 
     this.add(searchButton1); 
     this.add(searchButton2); 
    } 

    public static void main(String[] args) { 
     new ActionListenerExample1(); 
    } 

    @Override 
    public void actionPerformed(ActionEvent e) { 
     if (e.getSource() == searchButton1) { 
      buttonAction("GLOBAL LISTENER"); 
     } 
    } 

    private class ButtonAction implements ActionListener { 
     @Override 
     public void actionPerformed(ActionEvent e) { 
      buttonAction("LOCAL LISTENER"); 
     } 
    } 

    private void buttonAction(String label) { 
     JOptionPane.showMessageDialog(this, 
      String.format("%s: %s", label, searchText.getText())); 
    } 

    @Override 
    public void keyPressed(KeyEvent e) { 
     if (e.getKeyChar() == KeyEvent.VK_A) { 
      buttonAction("KEYBOARD"); 
     } 
    } 

    @Override 
    public void keyReleased(KeyEvent e) { } 

    @Override 
    public void keyTyped(KeyEvent e) { } 
} 
1

Если вы правильно поняли, вы хотите вызвать метод из класса, в котором была создана кнопка, а не метод из другого класса.

Во-первых, обратите внимание, что в то время как вы технически вызов метода здесь

JButton search = new JButton(new ButtonAction("Search", KeyEvent.VK_A)); 

, что происходит на самом деле в том, что вы передаете объект ButtonAction конструктору JButton. Самое близкое, что я могу придумать, получит то, что вы хотите, - это использовать класс, который вы используете, продлить ButtonAction.

+0

Я должен вернуться в массив данных основного класса, чтобы отобразить его в таблице данных, если я использую это выражение 'JButton search = new JButton (новый ButtonAction (« Поиск », KeyEvent .VK_A)); 'Я ничего не могу вернуть – Wizard

+0

Трудно дать больше ответа, чем то, что у меня есть, не видя свой код. Пожалуйста, напишите, что у вас есть, чтобы мы могли видеть, что вы делаете. – HXSP1947

Смежные вопросы