2015-06-09 2 views
0

Я пытаюсь сделать так, чтобы моя кнопка закрывалась за рамки, но ничего не делает. Я просмотрел несколько StackOverflow нитей, но никто из них не похоже на работу на моем это .. вот что я до сих порПочему мой Jbutton ничего не нажимает?

JButton start = new JButton("Start"); 
    start.setBounds(251, 216, 119, 23); 

    start.addActionListener(new ActionListener(){ 

     @Override 
     public void actionPerformed(ActionEvent evt) { 

      try { 
       int hpToEat = Integer.parseInt(GUI.textField.getText()); 
       Frost.hp = hpToEat; 
      } catch(NumberFormatException nfe) { 
       GUI.textField.setText(""); 
      } 
      setVisible(false); 
     } 
    }); 
    contentPane.add(start); 

Я попытался сделать метод, который использует closeFrame super.dispose(); и я также попробовал system.exit (0);

Есть ли у кого-нибудь идеи относительно того, почему моя кнопка не будет делать Что я хочу от нее делать?

Кто-то просил остальную часть моего кода, так вот:

import java.awt.BorderLayout; 
import java.awt.EventQueue; 

import javax.swing.JFrame; 
import javax.swing.JPanel; 
import javax.swing.border.EmptyBorder; 
import javax.swing.JLabel; 
import java.awt.Font; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 

import javax.swing.JCheckBox; 
import javax.swing.JTextField; 
import javax.swing.JButton; 


public class GUI extends JFrame{ 

private JPanel contentPane; 
public static JTextField textField; 


/** 
* Launch the application. 
*/ 
public static void main(String[] args) { 
    EventQueue.invokeLater(new Runnable() { 
     public void run() { 
      try { 
       GUI frame = new GUI(); 
       frame.setVisible(true); 
      } catch (Exception e) { 
       e.printStackTrace(); 
      } 
     } 
    }); 
} 

/** 
* Create the frame. 
*/ 
public GUI() { 

    //LABELS =================================================================================================== 
+0

У вас даже есть ошибки? –

+2

Быстрое примечание: 'start.addActionListener (e -> {System.out.println (« Вы нажали кнопку »);});' Если это не распечатывается, вы нажали ..: «тогда есть что-то еще неправильно. Как contentPane не добавляется в окно или что-то еще. Сначала попробуйте это просто. – Emz

+0

Является ли 'GUI' ссылкой на ваш графический интерфейс или именем вашего GUI-класса? Если это имя вашего класса, вы должны написать 'GUI.this.setVisible (false)' –

ответ

3

Проблема заключается в том, что GUI.textfield не то, что вы думаете. Вы затенять поле здесь:

JTextField textField = new JTextField(); 

Это создает локальную переменный по имени textField, он не устанавливает статическое поле, который вы используете в слушателе действий. Быстрое исправление написало бы просто:

textField = new JTextField(); 

Однако я рекомендую отказаться от привычки использовать статические поля. Этот подход не масштабируется. Кроме того, не используют абсолютное позиционирование. Это приводит к бесконечным проблемам (просто просмотрите несколько вопросов в теге swing для примеров). Научитесь использовать менеджеры макетов с самого начала.

+0

WOW спасибо. Почему это остановило setVisible (false), из выполнения, хотя .. – user125535

+0

@ user125535 Когда 'textField' не инициализирован,' GUI.textField.getText() 'throws a 'NullPointerException', поэтому' setVisible() 'не достигается. Исключение попадает в swing, поэтому программа продолжает работать, но вы должны увидеть трассировку стека в консоли. – kiheru

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