2015-09-13 4 views
1

Я немного новичок в Java, и я столкнулся с ошибкой, пытающейся добавить активного слушателя к кнопке в моем графическом интерфейсе. Это довольно простой графический интерфейс, если не бит. Прямо сейчас есть только метка, кнопка и область текста. То, что я пытаюсь сделать на самом деле, - это щелчок на кнопке, чтобы он вносил данные из текстовой области и менял метку, чтобы ответить на нее. Это очень простая идея ... но для новичков это было очень досадно. Я в основном самоучка, и всякий раз, когда я пытаюсь добавить активного слушателя, у меня возникают обширные проблемы.Добавление прослушивателя действий в JButton

Я полагаю, что все мои попытки добавления активного слушателя слишком не оправдались, поэтому я вытащил свои попытки. Этот код - это просто графический интерфейс. Ничего не происходит, кроме того, что он инициирует код. Мой вопрос: как бы добавить активного слушателя и код ответа?

import java.awt.Color; 
import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 
import java.awt.*; 
import java.awt.event.*; 
import javax.swing.*; 
import java.awt.event.ActionListener; 
import java.awt.event.ActionEvent; 

public class IgnisTest extends JFrame { 
    JPanel pnlButton = new JPanel();  
    JButton say = new JButton("Say"); 
    JLabel output = new JLabel("This is a test");  
    JTextField input = new JTextField(); 


    public IgnisTest() {  
     pnlButton.setBackground(Color.black); 
     say.setPreferredSize(new Dimension(100, 25)); 
     input.setPreferredSize(new Dimension(100, 25)); 
     pnlButton.add(say); 
     pnlButton.add(input); 

     JPanel pnlWrapper = new JPanel(new GridBagLayout()); 
     pnlWrapper.setBackground(Color.black); 
     GridBagConstraints constraints = new GridBagConstraints(); 
     pnlWrapper.add(pnlButton, constraints); 

     JPanel pnlLeft = new JPanel(); 
     pnlLeft.setBackground(Color.black); 
     add(pnlWrapper, BorderLayout.SOUTH); 
     add(pnlLeft, BorderLayout.CENTER); 
     pnlLeft.add(output); 

     output.setForeground(Color.white); 
     setSize(400, 600); 
     setTitle("Ignis"); 
     setLocationRelativeTo(null); 
     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     setVisible(true); 
    } 

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

ответ

1

Самый простой способ сделать это, используя анонимный класс, как это.

say.addActionListener(new ActionListener() { 

    @Override 
    public void actionPerformed(ActionEvent e) { 
     output.setText(input.getText()); 
    } 
}); 

Вы можете найти более подробную информацию о классах Anonymous в https://docs.oracle.com/javase/tutorial/java/javaOO/anonymousclasses.html

+0

Спасибо! Я попробовал почти этот точный код раньше (у меня не было output.setText (input.getText()), просто чтобы он изменил метку в качестве теста), но я отсутствовал @Override. Я очень ценю это: до сих пор у меня было две программы, графический интерфейс и программа без интерфейса (вместо этого используйте сканер и println). Я очень ценю помощь – Prometheus

+0

Добро пожаловать !!! Кстати, '@ Override' не является обязательным. Он инструктирует компилятор, что вы намерены переопределить метод в суперклассе. Более подробную информацию вы найдете на странице https://docs.oracle.com/javase/tutorial/java/IandI/override.html. – shan1024

0

Добавьте ActionListener с помощью anonumousinnerclass или реализации ActionListener

say.addActionListener(new ActionListener() { 

      @Override 
      public void actionPerformed(ActionEvent e) { 
       System.out.println(input.getText()); 
       //do your logic 
      } 
     }); 
Смежные вопросы