Reputation: 19
I have to write a GUI program to play a lights game. This game should display 6 lights, include a menu bar.
This is how far I have gotten so far:
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class LightsGame extends JFrame{
LightsPanel lightPnl = new LightsPanel();
JButton switchButton[] = new JButton[6];
private LightsGame(){
JFrame frame = new JFrame("Lights Game");
JPanel buttonPanel = new JPanel();
JPanel labelPanel = new JPanel();
this.getContentPane().add(labelPanel);
JLabel label = new JLabel("Switch on all the Lights");
labelPanel.add(label);
//LightsPanel lightPnl = new LightsPanel();
//Code for buttons:
for (int k = 0; k <= 5; k++){
switchButton[k] = new JButton("Light " + k );
buttonPanel.add(switchButton[k]);
}
frame.add(labelPanel, BorderLayout.NORTH);
frame.add(lightPnl, BorderLayout.CENTER);
//lightPnl.add(light1, BorderLayout.CENTER);
frame.add(buttonPanel, BorderLayout.SOUTH);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true); //Displays the frame
frame.pack(); //Makes the frame as big as it needs to be.
}//LightsGame()
private class ButtonHandler implements ActionListener {
public void actionPerformed(ActionEvent e){
if( e.getSource() == switchButton[0]) // toggle lights controlled by button 0
//Switch the light on or off
lightPnl.toggleLight();
}//actionPerformed
}//ButtonHandler
private class MenuHandler implements ActionListener {
public void actionPerformed(ActionEvent e) {
//Stop the Program
System.exit(0);
}//ActionPerformed
}//MenuHandler
public static void main(String[] args){
//JLabel label = new JLabel("Hello"); // ?
LightsGame game = new LightsGame();
}//main
}//LightsGame
and I am using this LightsPanel class (that needs work too):
import javax.swing.*;
import java.awt.*;
public class LightsPanel extends JPanel{
//Background color
private final Color backClr = Color.LIGHT_GRAY,
//Outline color
outlineClr = Color.BLACK,
//Color of the light when it is on
onClr = Color.YELLOW,
//Color of the light when it is off
offClr = Color.GRAY;
private boolean switchedOn; // ?
boolean[] array = new boolean[6];
public LightsPanel(){
super();
setPreferredSize(new Dimension(800, 200));
boolean[] switchedOn = new boolean[6]; // ?
//switchedOn = false;
}//LightsPanel()
public void paintComponent(Graphics gc){
super.paintComponent(gc);
Graphics2D l = (Graphics2D)gc;
//Draw the background
setBackground(backClr);
//Draw the light
if (switchedOn)
l.setColor(onClr);
else
l.setColor(offClr);
l.fillOval(75, 75, 50, 50);
//Draw the outline of the light
l.setColor(outlineClr);
l.drawOval(75, 75, 50, 50);
}//paintComponent
public void toggleLight() {
//Change the state of the light
if(switchedOn)
switchedOn = false;
else
switchedOn = true;
//Redraw the panel
repaint();
}//toggleLight
public void allLightsOn() {
}//allLightsOn
}//LightsPanel
Right now I am stuck trying to make a loop to display 6 lights and have them work with 6 buttons. I cannot get the buttons to show up either. I need to add buttons to the buttonPanel but I'm not sure how to do that.
My buttons should toggle and correspond to certain lights..
Button 0 : lights 0, 2
Button 1 : lights 1, 3
Button 2 : lights 0, 1, 2, 3, 5
Button 3 : lights 0, 1, 2, 4, 5
Button 4 : lights 2, 4
Button 5 : lights 3, 5
If anyone is willing or has time to help me with this it would be greatly appreciated. Thank you!
Upvotes: 1
Views: 1594
Reputation: 347244
Basically, you're not adding any buttons to anything...
You have this great loop, which seems to make sense to build your logic here...
for (int k = 0; k <= 5; k++){
switchButton[k] = new JButton("Light" + k );
}
For example...
for (int k = 0; k < switchButton.length; k++){
switchButton[k] = new JButton("Light" + k );
buttonPane.add(switchButton[k]);
}
Now the next time you need to attach some kind of handler to the button so you can change the light state accordingly...
For this, you will need to take a look at How to use buttons and How to write an action listener.
Personally, I would make the LightsPanel
responsible for a single light and simply create as many instance of this panel as you need. Then you could simply create a switch
method which turns the light on or off as required...
Upvotes: 2