2013-06-09 4 views
0

Хорошо, я могу получить текстовые поля и обычный текст и даже изображения, чтобы показать, но я не могу получить кнопку для показа. Я не уверен, что я делаю неправильно, потому что я сделал то же самое для остальных. Любая помощь будет большой благодарностью!Все работает, кроме кнопок. GUI Java

package EventHandling2; 

import java.awt.FlowLayout; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 

import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 

import EventHandling.GUITest; 

public class EventMain extends JFrame{ 

    private JLabel label; 
    private JButton button; 

    public static void main(String[] args) { 
     EventMain gui = new EventMain(); 
     gui.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // when click x close program 
     //gui.setSize(600, 300); 
     gui.setVisible(true); 
     gui.setTitle("Button Test"); 
    } 

    public void EventMain(){ 
     setLayout(new FlowLayout()); 

     button = new JButton ("click for text"); 
     add(button); 

     label = new JLabel (""); 
     add(label); 

     Events e = new Events(); 
     button.addActionListener(e); 
    } 

    public class Events implements ActionListener { 
     public void actionPerformed(ActionEvent e) { 
      label.setText("Now you can see words"); 
     } 
    } 
} 
+0

Не устанавливать размер контейнеров верхнего уровня. Вместо этого разместите контент и вызовите 'pack()' (непосредственно перед 'setVisible (true)'). Чтобы лучше помочь, опубликуйте [SSCCE] (http://sscce.org/). –

+0

Я пробовал это сделать, и кнопка все еще не отображается –

+1

* «Я пробовал это делать» * Для лучшей помощи скорее отправьте ** [SSCCE] (http://sscce.org/). ** –

ответ

4

проблема с методом: void EventMain()

Конструктор имеет НЕТ возвращаемого типа. Просто удалите "void". Код будет работать нормально.

+0

Да, это было! Спасибо. –

+0

@ LukeWorthing или вызов 'gui.EventMain()' –

0

Ваш ActionListener (е) содержит небольшую ошибку структуры управления:

public void actionPerformed(ActionEvent e) { 
     label.setText("Now you can see words"); 
} 

Изменение к:

public void actionPerformed(ActionEvent e) { 
     if (e.getSource() == button) { 
      label.setText("Now you can see words"); 
     } 
} 
+0

Я сделал это, но я до сих пор не вижу кнопки. Спасибо за уловку. –

0

Прежде всего, вы должны удалить ключевое слово void в конструкторе EventMain. Затем создайте JPanel и добавьте в него компоненты, затем добавьте JPanel в JFrame.contentPane.

Следующий код должен работать:

public class EventMain extends JFrame { 

    private final JLabel label; 
    private final JButton button; 

    public static void main(String[] args) { 
     EventMain gui = new EventMain(); 
     gui.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // when click x 
                  // close program 
     gui.setSize(600, 300); 
     gui.setTitle("Button Test"); 
     gui.setVisible(true); 

    } 

    public EventMain() { 
     // setLayout(new FlowLayout()); 
     JPanel panel = new JPanel(new FlowLayout()); 
     button = new JButton("click for text"); 
     panel.add(button); 

     label = new JLabel(""); 
     panel.add(label); 

     Events e = new Events(); 
     button.addActionListener(e); 

     this.getContentPane().add(panel); 
    } 

    public class Events implements ActionListener { 
     public void actionPerformed(ActionEvent e) { 
      label.setText("Now you can see words"); 
     } 
    } 
} 
Смежные вопросы