In: Computer Science
Develop a simple GUI-based Java program that may be used to control a lighting system
/* THIS IS A ELECTRIC BALL CONTROL PROGRAM. USING GUI BUTTON WE
CAN SWITCH ON OR OFF THE BALL. ONE SLIDER IS AVAILABLE TO CONTROL
CONTRAST LABEL */
/* STRUCTURE OF PROGRAM
PARENT FRAME CONSISTING OF TWO PANEL (panelTop AND panelButtom)
WITH FlowLayout.
IN TOP PANEL ONE LABLE HAS ADDED TO SHOW THE IMAGE OF BALL IN ICON
FORMAT
HERE WE HAVE TAKEN TWO IMAGE FOR BALL (b1.png and b2.png), ONE FOR
OFF STATE AND ANOTHER FOR OFF STATE
IN BUTTOM PANEL , TWO OTHER PANELS(P1,P2) ARE ADDED.
TO PANEL ONE, BUTTON SWITCH (ON/OFF) ADDED.
TO PANEL TWO, SLIDER WITH LABEL ADDED.
INITALIZE THE LABEL WITH OFF STATE BALL
ONE CUSTOM EVENT HANDELER CLASS EventHandler HAS BEEN DEFINED WITH ACTIONLISTER,CHANGELISTER
EVENT HANDELER REGISTERED TO BUTTON (ON/OFF)
EVENT HANDELER REGISTERED TO JSLIDER
PLEASE VIEW SCREENSHOT OF CODE FOR BETTER UNDERSTANDING OF STRCUTURE
*/
import java.awt.*; // for gridlayout
import java.awt.image.*;
import java.io.*;
import javax.swing.*;
import javax.imageio.ImageIO;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import java.awt.event.*;
import java.util.Hashtable;
public class Ball {
JButton bl,b2;
JPanel panelTop,panelButtom;
JFrame frame ;
JLabel label,label2;
float scaleFactor=1.0f;//change scaleFactor to change
contrast
/*keep the value scaleFactor = 1.0f; as for a normal image*/
RescaleOp rescale;
JSlider slider;
int Switch=0;
Ball()
{
// main window
JFrame.setDefaultLookAndFeelDecorated(true);
frame = new JFrame("Control a
Lighting System");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
panelTop = new JPanel();
panelButtom = new JPanel();
frame.setLayout(new
FlowLayout());
frame.add(panelTop);
frame.add(panelButtom);
/*
PANEL 1 LAYOUT
*/
label=new JLabel();
label.setBounds(50,50,300,300);
showImg("b1.png",1.0f); // initialize with off state
ball
panelTop.add(label);
/* PANEL 2 LAYOUT */
panelButtom.setLayout(new
GridLayout(2,1));
JPanel p1=new JPanel();
JPanel p2=new JPanel();
panelButtom.add(p1);
panelButtom.add(p2);
bl=new JButton(" Swith On
");
p1.add(bl);
label2=new JLabel("Control
Contrast");
p2.add(label2);
slider = new JSlider(JSlider.HORIZONTAL, 0, 100, 0);
//Turn on labels at major tick
marks.
slider.setMajorTickSpacing(10);
slider.setMinorTickSpacing(1);
slider.setPaintTicks(true); //
ALLOW RO SHOW TICK BARS ON SLIDERS
slider.setPaintLabels(true); //
ALLOW RO SHOW LABELS ON SLIDERS
p2.add(slider);
/*SLIDDER WITH LABEL ON 0
POSITION AND 100 POSITION */
Hashtable<Integer, JLabel>
labels = new Hashtable<>();
labels.put(0, new
JLabel("Max"));
labels.put(100, new
JLabel("Low"));
slider.setLabelTable(labels);
/*
REGISTERING EVENT HANDELER (CUSTOME EVENT HANDELER)
*/
ActionListener myHandlerButton = new
EventHandler();
bl.addActionListener(myHandlerButton); /// Binding the custom event
handler
ChangeListener myHandleSlide =
new EventHandler();
slider.addChangeListener(myHandleSlide);
/*SETTING OF PARENT FRAME TO
DISPPLAY */
frame.pack();
frame.setVisible(true);
frame.setSize(400,500);
}
/* CUSTOM EVENT HANDELER CLASS */
class EventHandler implements
ActionListener,ChangeListener
{
public void actionPerformed(ActionEvent e) // WHEN
BUTTON CLICK OCCURED
{
if(e.getSource()
== bl)
{
if(Switch==0)
{
Switch=1;
showImg("b2.png",1.0f); //
call showImg function to show off image
bl.setText(" Switch Off ");
// change label of button
}else
{
Switch=0;
showImg("b1.png",1.0f); //
call showImg function to show off image
bl.setText(" Switch On "); //
change label of button
}
}
}
public void stateChanged(ChangeEvent event) // WHEN
JSLIDER VALUE CHANGED
{
if(Switch==0)
/*WHEN BALB IF OFF , AND TRY TO CONTROL
CONTRAST*/
JOptionPane.showMessageDialog(panelButtom, "Please switch on
ball","ERROR", JOptionPane.ERROR_MESSAGE);
else
{
int value = slider.getValue(); // getting value
form slider
double f=value/100.0 + 1 ; // WE NORMAL SCALE
FACTOR IN FORM OF 1.0f
showImg("b2.png",(float)f); // call showImg
function to show on image with desired contrast
}
}
} // END OF EventHandler CLASS
void showImg(String img,float sFactor )
{
try
{
BufferedImage
image = ImageIO.read(new File(img)); //READING THE FILE IMAGE FROM
STORAGE
// Setting up
the scaling and
// the offset parameters for processing
// WE ARE CONTROLING scaleFactor FROM SLIDER VALUE TO
CONTROL CONTRAST
rescale = new
RescaleOp(sFactor,0.0f, null); // RescaleOp(float scaleFactor,
float offset, RenderingHints hints)
// applying
the parameters on the image
// by using filter() method,
image=rescale.filter(image,null);
ImageIcon icon =
new ImageIcon(image);
label.setIcon(icon); //SET IMAGE TO LABEL IN BUTTON
PANEL
}
catch(IOException ex)
{
System.out.println(ex);
}
}
public static void main(String[] arguments)
{
new Ball();
}
}
IMAGES OF BALL
b1.png
b2.png
SCREEN SHOT OF CODE
SCREEN SHOT OF
OUTPUT