Well, why not have fun with colors?
So let me introduce you guys to my color mixer and Slider tutorial !
Packages
Note by using a static import I can easily just type in instances instead of referring to the class then use the instance method...Code:import javax.swing.*; import static javax.swing.JOptionPane.*; import javax.swing.event.*; import java.awt.*; import java.awt.event.*;
The class
Inheriting everything from the JFrame class and implementing instructions from the ActionListener and ChangeListener interfaceCode:public class JMyColor extends JFrame implements ActionListener,ChangeListener {
Variables and instances...
Everything in here will be used. The text fields will present the numbers you can add to change the colors. Remember we are using RGB color scheme(DEC=INTEGERS) LOLCode:JFrame JF = new JFrame(); private JLabel mix = new JLabel("Mix Colors",JLabel.CENTER); private JTextField X = new JTextField("0"); private JTextField Y = new JTextField("0"); private JTextField Z = new JTextField("0"); private JPanel ColorPanel = new JPanel(); private JSlider Alpha = new JSlider(); private JSlider Beta = new JSlider(); private JSlider Zeta = new JSlider(); private JButton MixColor = new JButton("Mix"); private JMenuBar JMB = new JMenuBar(); private JMenu JM = new JMenu("Actions"); private JMenuItem quit = new JMenuItem("Close"); private JLabel CopyRight = new JLabel("Copyright - Turk4n",JLabel.CENTER);Plus the sliders will change the colors
Constructor GUI
As more or less, we are adding each item without following a Layout. This not recommended for users who likes to have something prebuild and easy to use. However if you want it to be positionable in your way you have to follow like I did... Our sliders will add a change as they are moved. That's why we are using Change Listener instead of the Action Listener that we are using for our close operation and mixer !Code:public JMyColor() { setLayout(null); add(JMB); JMB.add(JM); JM.add(quit); add(MixColor); add(CopyRight); add(ColorPanel); add(mix); add(X); add(Y); add(Z); add(Alpha); add(Beta); add(Zeta); CopyRight.setBounds(0,215,100,20); CopyRight.setFont(new Font("Sanserif",Font.ITALIC,10)); JMB.setBounds(0,0,300,15); X.setBounds(10,30,60,20); Y.setBounds(10,60,60,20); Z.setBounds(10,85,60,20); Alpha.setBounds(200,35,90,20); Alpha.setValue(0); Alpha.setMinimum(0); Alpha.setMaximum(255); Beta.setBounds(200,60,90,20); Beta.setValue(0); Beta.setMinimum(0); Beta.setMaximum(255); Zeta.setBounds(200,80,90,20); Zeta.setValue(0); Zeta.setMinimum(0); Zeta.setMaximum(255); mix.setBounds(100,25,80,40); MixColor.setBounds(110,60,60,20); ColorPanel.setBounds(100,130,80,80); MixColor.addActionListener(this); quit.addActionListener(this); Alpha.addChangeListener(this); Zeta.addChangeListener(this); Beta.addChangeListener(this); setSize(305,270); setVisible(true); setTitle("Color Mixer"); setDefaultCloseOperation(EXIT_ON_CLOSE); show(); }
Sliders Listener
As we have sliders that are move able. they also generate an integer value from 0-255Code:public void stateChanged(ChangeEvent e) { Color c = new Color(Alpha.getValue(),Beta.getValue(),Zeta.getValue()); String NewAlpha = String.valueOf(Alpha.getValue()); String NewBeta = String.valueOf(Beta.getValue()); String NewZeta = String.valueOf(Zeta.getValue()); X.setText(NewAlpha); Y.setText(NewBeta); Z.setText(NewZeta); ColorPanel.setBackground(c); }
So basically we set the values the sliders are on to the ColorPanel and to the textfields :>
Action Listener
Now the action listener will read in from our textfields. However the fields are strings and we can't use strings when integers are needed to display the color... We parse it and represent them as numbers from 0-255. Now. When the user is doing something wrong, like posting something out of boundary or just plain stupid and typing in color names...It will run some error messages for their own safety...Code:public void actionPerformed(ActionEvent e) { if(e.getSource()==MixColor) { String x = X.getText(); String y = Y.getText(); String z = Z.getText(); int NewX = 0; int NewY = 0; int NewZ = 0; try { NewX = Integer.parseInt(x); NewY = Integer.parseInt(y); NewZ = Integer.parseInt(z); Alpha.setValue(NewX); Beta.setValue(NewY); Zeta.setValue(NewZ); Color c = new Color(NewX, NewY, NewZ); ColorPanel.setBackground(c); }catch(NumberFormatException NFE) { showMessageDialog(JF,"Does not compute !","String Error/One or two fields incorrect",JOptionPane.ERROR_MESSAGE); } catch(Exception OtherException){ showMessageDialog(JF,"Does not compute !","Out of range 0-255",JOptionPane.ERROR_MESSAGE); } } else if(e.getSource()==quit) { System.exit(0); } }
The main
Here is the end and we are going to start the application and see the power of slidersCode:public static void main(String[] arg) { new JMyColor(); } }And of course the colors !
Output
Cheers !


LinkBack URL
About LinkBacks









Reply With Quote




+rep


Bookmarks
Algorithms and Data Structures
Java tutorials
Algorithms Forum