import javax.swing.*;
import java.awt.*;
import java.net.*;
import java.awt.event.*;
import javax.swing.text.*;

public class JTouchTest extends JFrame implements MouseListener, MouseMotionListener, ItemListener {
	JTextField tf = null;
	JCheckBox cb1 = null;
	JCheckBox cb2 = null;
	JCheckBox cb3 = null;
	JTextArea ta = null;
	JCheckBox ccb1 = null;
	JCheckBox ccb2 = null;
	JCheckBox ccb3 = null;
	JScrollPane scrollPane = null;
	JEditorPane pane = null;
	JCheckBox cbb1 = null;
	JCheckBox cbb2 = null;
	JCheckBox cbb3 = null;
	JScrollPane pp = null;
	JTextPane jtPane = null;
	JCheckBox cb11 = null;
	JCheckBox cb22 = null;
	JCheckBox cb33 = null;
	ItemListener il = this;
	MouseMotionListener mml = this;
	MouseListener ml = this;
	
		
	public JTouchTest() throws Exception {
		super("Test Frame");
		SwingUtilities.invokeAndWait(new Runnable() {
			public void run() {
				JPanel p = new JPanel(new GridLayout(4,4));
				tf = new JTextField("text field");
				cb1 = new JCheckBox("Disable");
				cb2 = new JCheckBox("Non-editable");
				cb3 = new JCheckBox("Non-Focusable");
				cb1.addItemListener(il);
				cb2.addItemListener(il);
				cb3.addItemListener(il);
				p.add(tf);
				p.add(cb1);
				p.add(cb2);
				p.add(cb3);
				
				ta = new JTextArea("text area");
				ccb1 = new JCheckBox("Disable");
				ccb2 = new JCheckBox("Non-editable");
				ccb3 = new JCheckBox("Non-Focusable");
				ccb1.addItemListener(il);
				ccb2.addItemListener(il);
				ccb3.addItemListener(il);
				p.add(ta);
				p.add(ccb1);
				p.add(ccb2);
				p.add(ccb3);
				
				String fileName = "PrintQL_Procedures.html";
				try {
					URL url = JTouchTest.class.getResource(fileName);
					pane = new JEditorPane(url);
					pane.setPage(url);
				} catch (Exception e) {
					e.printStackTrace();
				}	
				scrollPane = new JScrollPane(pane);
				cbb1 = new JCheckBox("Disable");
				cbb2 = new JCheckBox("Non-editable");
				cbb3 = new JCheckBox("Non-Focusable");
				cbb1.addItemListener(il);
				cbb2.addItemListener(il);
				cbb3.addItemListener(il);
				p.add(scrollPane);
				p.add(cbb1);
				p.add(cbb2);
				p.add(cbb3);
				
				jtPane = new JTextPane();
				SimpleAttributeSet set = new SimpleAttributeSet();
			    StyleConstants.setBold(set, true);
			
			    // Set the attributes before adding text
			    jtPane.setCharacterAttributes(set, true);
			    jtPane.setText("This is a sample test ");
			
			    set = new SimpleAttributeSet();
			    StyleConstants.setItalic(set, true);
			    StyleConstants.setForeground(set, Color.red);
			    StyleConstants.setBackground(set, Color.blue);
			
			    Document doc = jtPane.getStyledDocument();
			    try { doc.insertString(doc.getLength(), "Swing ", set); } catch (Exception e) { e.printStackTrace(); }
			
			    set = new SimpleAttributeSet();
			    StyleConstants.setFontSize(set, 24);
			
			    try { doc.insertString(doc.getLength(), "Tutorial", set); } catch (Exception e) { e.printStackTrace(); }
				pp = new JScrollPane(jtPane);
				cb11 = new JCheckBox("Disable");
				cb22 = new JCheckBox("Non-editable");
				cb33 = new JCheckBox("Non-Focusable");
				cb11.addItemListener(il);
				cb22.addItemListener(il);
				cb33.addItemListener(il);
				p.add(pp);
				p.add(cb11);
				p.add(cb22);
				p.add(cb33);
				
				add(p);
				setSize(800, 400);
				setVisible(true);
			}
		});
	}
	
	
	public void itemStateChanged(ItemEvent ie) {
		JCheckBox box = (JCheckBox) ie.getSource();
		//All components Enable/Disable
		if (ie.getStateChange() == ItemEvent.SELECTED && box.equals(cb1)) {
			tf.setEnabled(false);
		} else if (ie.getStateChange() == ItemEvent.DESELECTED && box.equals(cb1)) {
			tf.setEnabled(true);
		}
		
		if (ie.getStateChange() == ItemEvent.SELECTED && box.equals(ccb1)) {
			ta.setEnabled(false);
		} else if (ie.getStateChange() == ItemEvent.DESELECTED && box.equals(ccb1)) {
			ta.setEnabled(true);
		}
		
		if (ie.getStateChange() == ItemEvent.SELECTED && box.equals(cbb1)) {
			pane.setEnabled(false);
		} else if (ie.getStateChange() == ItemEvent.DESELECTED && box.equals(cbb1)) {
			pane.setEnabled(true);
		}
		
		if (ie.getStateChange() == ItemEvent.SELECTED && box.equals(cb11)) {
			jtPane.setEnabled(false);
		} else if (ie.getStateChange() == ItemEvent.DESELECTED && box.equals(cb11)) {
			jtPane.setEnabled(true);
		}
		
		// Editable, Non-Editable
		if (ie.getStateChange() == ItemEvent.SELECTED && box.equals(cb2)) {
			tf.setEditable(false);
		} else if (ie.getStateChange() == ItemEvent.DESELECTED && box.equals(cb2)) {
			tf.setEditable(true);
		}
		
		if (ie.getStateChange() == ItemEvent.SELECTED && box.equals(ccb2)) {
			ta.setEditable(false);
		} else if (ie.getStateChange() == ItemEvent.DESELECTED && box.equals(ccb2)) {
			ta.setEditable(true);
		}
		
		if (ie.getStateChange() == ItemEvent.SELECTED && box.equals(cbb2)) {
			pane.setEditable(false);
		} else if (ie.getStateChange() == ItemEvent.DESELECTED && box.equals(cbb2)) {
			pane.setEditable(true);
		}
		
		if (ie.getStateChange() == ItemEvent.SELECTED && box.equals(cb22)) {
			jtPane.setEditable(false);
		} else if (ie.getStateChange() == ItemEvent.DESELECTED && box.equals(cb22)) {
			jtPane.setEditable(true);
		}
		
		// Focusable/Non-Focusable
		if (ie.getStateChange() == ItemEvent.SELECTED && box.equals(cb3)) {
			tf.setFocusable(false);
		} else if (ie.getStateChange() == ItemEvent.DESELECTED && box.equals(cb3)) {
			tf.setFocusable(true);
		}
		
		if (ie.getStateChange() == ItemEvent.SELECTED && box.equals(ccb3)) {
			ta.setFocusable(false);
		} else if (ie.getStateChange() == ItemEvent.DESELECTED && box.equals(ccb3)) {
			ta.setFocusable(true);
		}
		
		if (ie.getStateChange() == ItemEvent.SELECTED && box.equals(cbb3)) {
			pane.setFocusable(false);
		} else if (ie.getStateChange() == ItemEvent.DESELECTED && box.equals(cbb3)) {
			pane.setFocusable(true);
		}
		
		if (ie.getStateChange() == ItemEvent.SELECTED && box.equals(cb33)) {
			jtPane.setFocusable(false);
		} else if (ie.getStateChange() == ItemEvent.DESELECTED && box.equals(cb33)) {
			jtPane.setFocusable(true);
		}
	}
		
		
	
	public static void main (String args[]) throws Exception {
		JTouchTest test = new JTouchTest();
	}
	
	public void mousePressed(MouseEvent e) {
       System.out.println("MousePressed: " + e);
    }

    public void mouseReleased(MouseEvent e) {
       System.out.println("Mouse Released: " + e);
    }

    public void mouseEntered(MouseEvent e) {
       System.out.println("Mouse entered" + e);
    }

    public void mouseExited(MouseEvent e) {
       System.out.println("Mouse exited" + e);
    }

    public void mouseClicked(MouseEvent e) {
        System.out.println("Mouse Clicked: " + e);
    }
    
    public void mouseDragged(MouseEvent e) {
       System.out.println("Mouse Dragged: " + e);
    }
    
    public void mouseMoved(MouseEvent e) {
       System.out.println("Mouse Moved: " + e);
    }
}
	