Reputation: 135
I am working on a code that will generate a random number when you press a button and output that number. I have wrote this code and it compiles but when I press the button nothing works. Can someone please help. Here is some of my code.
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);
}
}
Upvotes: 3
Views: 145
Reputation: 347324
null
layouts, pixel perfect layouts are an illusion within modern ui design. There are too many factors which affect the individual size of components, none of which you can control. Swing was designed to work with layout managers at the core, discarding these will lead to no end of issues and problems that you will spend more and more time trying to rectifyInt1
within the ActionListener
for the button. This has no relationship to the Int1
of the class.super.paint
(be ready for some seriously weird and wonderful graphics glitches)b1
as you have with Int1
. You create an instance level field, but shadow it with a local variable in init
, meaning when start
is called, b1
is null
, which will result in a NullPointerxception
Instead, add a JLabel
to your applet, use it's setText
method to display the random value
b1.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
Random random1 = new Random();
int Int1 = random1.nextInt(11);
lable.setText(Integer.toString(Int1));
}
});
Also, if possible, I'd avoid using JApplet
, they have their own set of issues which can make life more difficult then it needs to be when learning the Swing API. Instead, try using a JPanel
for your main container and then add it to an instance of a JFrame
.
Also, take a look at:
for more details
Upvotes: 4