2013-11-14 2 views
0

Я работаю над экспериментом «игра в кости», поскольку я полный новичок, и, похоже, я многому учусь. Но я застрял в этом одном месте и не могу найти никакой помощи.Как подключить несколько кнопок для изменения одной переменной в алгоритме?

У меня есть генератор случайных чисел, где я могу отредактировать количество «сторон», которые умереть умереть с пользователем, вручную вменяющим цифры. Я хотел бы, чтобы пользователь мог нажать одну из кнопок, которые я добавил, и получить вычисленный случайный результат в нижней части экрана. Я не уверен, как это сделать, поэтому я хотел бы получить некоторое представление, даже если это всего лишь одна строка.

Также, пожалуйста, скажите мне, есть ли что-либо, что я делаю неправильно в любом случае, я действительно ДЕЙСТВИТЕЛЬНО новичок в этом и могу использовать какую-то помощь!

Вот мой код:

import java.util.Scanner; 
import java.awt.*; 
    import java.awt.event.*; 
import javax.swing.*; 
import javax.swing.JButton; 
import javax.swing.JFrame; 
import java.applet.Applet; 





public class randtest6t extends Applet 
{ 


public static void main(String[] args) 
{ 
int dieSides; 
Scanner keyboard = new Scanner(System.in); 
System.out.print("How many sides does the die need to be?"); 
dieSides = keyboard.nextInt(); 
int random = (int)(Math.random() * dieSides + 1); 
System.out.println("You rolled a " + random + "."); 



//NAMING BUTTONS 
JButton button2 = new JButton("2"); 
JButton button4 = new JButton("4"); 
JButton button6 = new JButton("6"); 
JButton button8 = new JButton("8"); 
JButton button10 = new JButton("10"); 
JButton button12 = new JButton("12"); 
JButton button20 = new JButton("20"); 
JButton button50 = new JButton("50"); 
JButton button100 = new JButton("100"); 


//LABELS 
JLabel sides = new JLabel("How many sides does the die need to be?"); 
JLabel text = new JLabel("Your roll ="); 
JLabel output = new JLabel("    " + random); 

output.setFont(new Font("Serif", Font.PLAIN, 56)); 
text.setFont(new Font("Serif", Font.PLAIN, 20)); 
sides.setFont(new Font("Serif", Font.PLAIN, 20)); 




//NAMING PANELS 
JPanel buttonpanel = new JPanel(new GridLayout(3,3)); 
JPanel outputpanel = new JPanel(new GridLayout(2,2)); 

//CONNECTING BUTTONS/TEXT/PANELS 
outputpanel.add(text); 
outputpanel.add(output); 

buttonpanel.add(button2); 
buttonpanel.add(button4); 
buttonpanel.add(button6); 
buttonpanel.add(button8); 
buttonpanel.add(button10); 
buttonpanel.add(button12); 
buttonpanel.add(button20); 
buttonpanel.add(button50); 
buttonpanel.add(button100); 

JFrame diceFrame = new JFrame("Dice Roll"); 

diceFrame.add(sides, BorderLayout.NORTH); 
diceFrame.add(outputpanel, BorderLayout.SOUTH); 
diceFrame.add(buttonpanel, BorderLayout.CENTER); 
diceFrame.setSize(500,500); 

diceFrame.setVisible(true); 
diceFrame.addWindowListener(new WindowAdapter(){ 
    public void windowClosing(WindowEvent e){ 
    System.exit(0); 
    } 
}); 
} 
} 

Извините, если я отформатирован неправильно или что-нибудь, я бы очень ценю вашу помощь!

Кроме того, чтобы быть ясно, что я хочу, чтобы это произошло так:

  1. button2 нажимается
  2. dieSides = 2
  3. INT случайная = (INT) (Math.random() * dieSides + 1);
  4. Показать результат на JFrame

Проблемы я имею что я не могу dieSides зависеть от кнопки, нажатая.

+0

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

+0

У вас должен быть обработчик событий для каждой кнопки и переназначить значение для вывода и обновить окно, чтобы оно отображалось –

ответ

0

Все ваши действия происходят в методе main(). Что вам нужно сделать, это разделить некоторые из этих функций на другие методы, которые вы можете вызвать. Например, в main() вы можете настроить все кнопки/панели, прослушиватели и т. Д., А затем дождаться щелчка. На ваших пуговицах не похоже, что у вас есть слушатели, вам нужно добавить ActionListener (отдельный класс или подкласс, который вы создаете и передаете методу addActionListener(Listener) каждой кнопки). Затем каждая кнопка должна вызывать метод, такой как rollDie(int dieSides), где x уникален для каждой кнопки, то есть кнопка2 должна звонить rollDie(2);

Это приведет к работе ваших кнопок.

И, наконец, метод rollDie(int dieSides) должен содержать ваш вызов в Math.Random().

Теперь вам нужно выяснить, как обновить панель, которая отображает числовой вывод с номером rollDie(int). Например, rollDie(int) может хранить, чем число внутри переменной уровня класса, и каждый новый метод, например updateOutputPanel(), может вызываться каждой кнопкой для обновления JLabel с новым номером.

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