2015-05-14 2 views
3

Я работаю над кодом, который будет генерировать случайное число, когда вы нажимаете кнопку и выводите это число. Я написал этот код, и он компилируется, но когда я нажимаю кнопку, ничего не работает. Может кому-то помочь. Вот некоторые из моего кода.Как я могу сделать эту работу JButton

public class slotmachine extends JApplet { 

    JButton b1 = new JButton("START"); 
    JPanel p; 
    int Int1; 

    public slotmachine() { 
     init(); 

    } 

    public void init() { 

     this.setLayout(null); 
     this.setSize(1000, 1000); 

     JButton b1 = new JButton("START"); 
     b1.setBounds(100, 100, 100, 100); 

     getContentPane().add(b1); 
     repaint(); 

    } 

    public void run() { 
     b1.addActionListener(new ActionListener() { 

      public void actionPerformed(ActionEvent e) { 
       Random random1 = new Random(); 
       int Int1 = random1.nextInt(11); 

      } 

     }); 
    } 

    public void paint(Graphics g) { 

     g.drawString("Your number is" + Int1, 30, 30); 

    } 
} 
+0

Не используйте макеты 'null'. – John

+0

Попробуйте удалить JButton b1 = new JButton ("START"); из метода init(), поскольку вы уже объявили его внутри класса. Или вместо этого объявите переменную как есть, но внутри init() инициализируйте ее. Также внутри вашего действия выполнен метод. Не инициализируйте новую переменную, вместо этого назначьте значение, которое уже объявлено внутри класса. Вам также нужно вызвать repaint() для обновления приложения – AK47

+0

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

ответ

4
  1. Избегайте использование null макетов, пиксельные совершенные макеты являются иллюзией в современном дизайне пользовательского интерфейса. Слишком много факторов, которые влияют на индивидуальный размер компонентов, ни один из которых вы не можете контролировать. Swing был разработан для работы с менеджерами компоновки в ядре, отбросив их, не будет конца проблем и проблем, которые вы будете тратить все больше и больше времени на исправление.
  2. Вы создаете локальную переменную Int1 в пределах ActionListener для кнопки , Это не имеет отношения к классу Int1.
  3. Вы никогда не говорите интерфейс для обновления
  4. Вы нарушаете краски цепь, не сумев вызвать super.paint (быть готовы к некоторым серьезным странных и удивительных графических глюков)
  5. Вы сделали ту же ошибку с b1, как у вас есть с Int1. Вы можете создать поле на уровне экземпляра, но тень его с локальной переменной в init, то есть, когда start называется, b1 является null, что приведет к NullPointerxception

Вместо этого добавьте JLabel в свой апплет, использовать его setText метод для отображения случайной величины

b1.addActionListener(new ActionListener() { 

    public void actionPerformed(ActionEvent e) { 
     Random random1 = new Random(); 
     int Int1 = random1.nextInt(11); 
     lable.setText(Integer.toString(Int1)); 
    } 

}); 

Кроме того, если это возможно, я бы не использовать JApplet, у них есть свой собственный набор вопросов, которые могут сделать жизнь более трудной, то это должно быть при изучении Swing API. Вместо этого попробуйте использовать JPanel для вашего основного контейнера, а затем добавьте его в экземпляр JFrame.

Кроме того, обратите внимание на:

для получения более подробной информации

+0

Thx для всех ссылок и рекомендаций. Вместо этого я попытаюсь использовать диспетчер компоновки. –

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