import java.awt.*; import javax.swing.*; import java.util.*; import java.awt.event.*; import javax.swing.event.*; /* swing vs awt -swing is more "modern", hip thing to do. -awt is a little rougher around the edges. both have their advantages, (speed vs ease, etc) not really that important. */ public class SwingTest extends JFrame implements ActionListener, ChangeListener { //lesson 1: everything in javax starts with "J". //(almost) private JSlider width_slider; private MyPanel drawing_area; //inheritence private JRadioButton black; private JRadioButton blue; private JRadioButton red; private JLabel color_label; private JLabel width_label; private JLabel area_label; //awt, no J! This is typically done with a JPanel. //However containers can work too. private Container content_panel; private Container left_area; //holds all of left private Container color_container; private Container width_container; //layout managers private GridBagLayout full_layout; private GridBagLayout left_layout; //new stuff private JButton invert_button; private Container invert_container; private JLabel invert_label; //the interesting stuff private int circle_width; private Color color; //dont just throw everything in the constructor!!! //ORGANIZE!!!! //create relevant objects //create layouts and constraints //add objects to containers //deal with events public SwingTest() { super("java. FFFFFFFUUUUUUUUUUU"); this.setDefaultCloseOperation(EXIT_ON_CLOSE); this.full_layout = new GridBagLayout(); this.content_panel = new Container(); this.content_panel.setLayout(full_layout); this.setContentPane(this.content_panel); this.content_panel.setVisible(true); init_panel(); init_left(); this.setSize(400,400); //big enough to pack down. this.pack(); } private void init_panel() { this.drawing_area = new MyPanel(); this.drawing_area.setPreferredSize(new Dimension(300,300)); GridBagConstraints c = new GridBagConstraints(); c.fill = GridBagConstraints.BOTH; c.gridx = 1; c.weightx = .1; c.weighty = 1; this.drawing_area.setBackground(Color.white); this.content_panel.add(this.drawing_area, c); this.drawing_area.setVisible(true); } private void init_left() { this.left_area = new Container(); GridBagConstraints left_c = new GridBagConstraints(); left_c.gridx = 0; left_c.weighty = 1; left_c.insets = new Insets(10, 10, 10, 10); this.content_panel.add(this.left_area, left_c); this.left_layout = new GridBagLayout(); this.left_area.setLayout(left_layout); init_color(); GridBagConstraints c_c = new GridBagConstraints(); c_c.insets = new Insets(10,0,10,0); c_c.gridy = 0; c_c.anchor = GridBagConstraints.WEST; this.left_area.add(this.color_container, c_c); GridBagConstraints w_c = new GridBagConstraints(); w_c.insets = new Insets(10,0,10,0); w_c.gridy = 1; w_c.anchor = GridBagConstraints.WEST; init_width(); this.left_area.add(this.width_container, w_c); GridBagConstraints i_c = new GridBagConstraints(); i_c.gridy = 2; i_c.insets = new Insets(10,0,10,0); i_c.anchor = GridBagConstraints.EAST; init_invert(); this.left_area.add(this.invert_container, i_c); } private void init_color() { ButtonGroup bg = new ButtonGroup(); this.color_container = new Container(); GridLayout g = new GridLayout(4,1); this.color_container.setLayout(g); black = new JRadioButton("black", true); blue = new JRadioButton("blue"); red = new JRadioButton("red"); JLabel label = new JLabel("Color"); this.color_container.add(label); this.color_container.add(black); this.color_container.add(blue); this.color_container.add(red); bg.add(black); bg.add(blue); bg.add(red); black.setActionCommand("black"); blue.setActionCommand("blue"); red.setActionCommand("red"); black.addActionListener(this); blue.addActionListener(this); red.addActionListener(this); this.color_container.setVisible(true); } private void init_width() { this.width_container = new Container(); GridLayout g = new GridLayout(2,1); this.width_container.setLayout(g); JLabel width = new JLabel("Width"); this.width_slider = new JSlider(JSlider.HORIZONTAL, 0, 20, 10); this.width_slider.addChangeListener(this); width_slider.setMajorTickSpacing(10); width_slider.setMinorTickSpacing(1); width_slider.setPaintTicks(true); width_slider.setPaintLabels(true); this.width_container.add(width); this.width_container.add(this.width_slider); this.width_container.setVisible(true); } private void init_invert() { this.invert_label = new JLabel("Invert Color"); this.invert_button = new JButton("Invert"); this.invert_container = new Container(); GridBagLayout g = new GridBagLayout(); this.invert_container.setLayout(g); GridBagConstraints lc = new GridBagConstraints(); lc.gridy = 0; GridBagConstraints bc = new GridBagConstraints(); bc.gridy = 1; this.invert_container.add(this.invert_label, lc); this.invert_container.add(this.invert_button, bc); this.invert_button.setActionCommand("invert"); this.invert_button.addActionListener(this); } //radio buttons public void actionPerformed(ActionEvent e) { if(e.getSource() == black) this.drawing_area.SetColor(Color.black); else if(e.getSource() == blue) this.drawing_area.SetColor(Color.blue); else if(e.getSource() == blue) this.drawing_area.SetColor(Color.red); else if(e.getSource() == this.invert_button) { Color c = this.drawing_area.GetColor(); Color new_c = new Color((255 - c.getRed()), (255 - c.getGreen()), (255 - c.getBlue())); this.drawing_area.SetColor(new_c); } this.drawing_area.repaint(); } //slider public void stateChanged(ChangeEvent e) { if(e.getSource() == this.width_slider) this.drawing_area.SetWidth(this.width_slider.getValue()); this.drawing_area.repaint(); } }