300 likes | 433 Vues
Graphics and event-driven programs. Learning objectives. By the end of this lecture you should be able to:. identify and use some of the common components of the Java Swing package; program graphics components to handle mouse-click events; describe the role of layout managers ;
E N D
Graphics and event-driven programs Learning objectives By the end of this lecture you should be able to: • identify and use some of the common components of the Java Swing package; • program graphics components to handle mouse-click events; • describe the role of layout managers; • use the FlowLayout and BorderLayout managers; • make use of compound containers.
Which printer [a] LPT1 or [b] LPT2?: 1 2 How many copies do you wish to print?: Print all pages (y/n)?: y [P]rint now or [C]ancel?: C
Swing and AWT Swing AWT
The SmileyFace class public class RunSmileyFace { public static void main(String[] args) { new SmileyFace(); } }
import java.awt.*; import javax.swing.*; public class SmileyFace extends JFrame { public SmileyFace() { // initialise the screen } public void paint(Graphics g) { // draw onto the screen } }
public SmileyFace() { setTitle("Smiley Face"); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setSize(250,220); setLocation(300,300); getContentPane().setBackground(Color.yellow); setVisible(true); }
public void paint(Graphics g) { super.paint(g); } g.setColor(Color.red); g.drawOval(85,75,75,75); g.setColor(Color.blue); g.drawOval(100,95,10,10); g.drawOval(135,95,10,10); g.drawArc(102,115,40,25,0,-180); g.drawString("Smiley Face", 90,175);
import javax.swing.*; import java.awt.*; public class ChangingFace extends JFrame { public ChangingFace() { // code goes here } public void paint(Graphics g) { // code goes here } } private boolean isHappy = true; private JButton happyButton = new JButton("Smile"); private JButton sadButton = new JButton("Frown");
public ChangingFace() { setTitle("Changing Face"); getContentPane().setBackground(Color.yellow); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setSize(250, 200); setLocation(300,300); setVisible(true); } setLayout(new FlowLayout()); add(happyButton); add(sadButton);
public void paint(Graphics g) { super.paint(g); g.setColor(Color.red); g.drawOval(85,45,75,75); g.setColor(Color.blue); g.drawOval(100,65,10,10); g.drawOval(135,65,10,10); g.drawString("Changing Face", 80,155); if(isHappy == true) { g.drawArc(102,85,40,25,0,-180); } else { g.drawArc(102,85,40,25,0,180); } }
public ChangingFace() { setTitle("Changing Face"); setLayout(new FlowLayout()); add(happyButton); add(sadButton); getContentPane().setBackground(Color.yellow); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setSize(250, 200); setLocation(300,300); setVisible(true); } happyButton sadButton .addActionListener( ); this .addActionListener( ); this
import javax.swing.*; import java.awt.*; public class ChangingFace extends JFrame { public ChangingFace() { // code goes here } public void paint(Graphics g) { // code goes here } } import java.awt.event.*; implements ActionListener private boolean isHappy = true; private JButton happyButton = new JButton("Smile"); private JButton sadButton = new JButton("Frown"); public void actionPerformed(ActionEvent e) { // code goes here }
public void actionPerformed(ActionEvent e) { if(e.getSource() == happyButton) { isHappy = true; repaint(); } if(e.getSource() == sadButton) { isHappy = false; repaint(); } }
Running the application public class RunChangingFace { public static void main(String[] args) { new ChangingFace(); } }
import javax.swing.*; import java.awt.event.*; import java.awt.*; class PushMe extends JFrame implements ActionListener { private JTextField myTextField = new JTextField(15); private JButton myButton = new JButton("please push me"); private JLabel myLabel = new JLabel("Enter some text and push the button", JLabel.CENTER); public PushMe() { // code goes here } public void actionPerformed(ActionEvent e) { // code goes here } }
public PushMe() { setTitle("Push Me"); setLayout(new FlowLayout()); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setSize(220,120); setLocation(400, 300); add(myTextField); add(myButton); add(myLabel); myButton.addActionListener(this); setVisible(true); }
public void actionPerformed(ActionEvent e) { } String myText; myText = myTextField.getText(); myLabel.setText("You entered: " + myText); myTextField myLabel
A GUI for the Oblong class JLabel JTextField JTextField JLabel JButton JTextArea
import java.awt.*; import java.awt.event.*; import javax.swing.*; public class OblongGUI extends JFrame implements ActionListener { private Oblong myOblong = new Oblong(0,0); private JLabel lengthLabel = new JLabel("Length"); private JTextField lengthField = new JTextField(5); private JLabel heightLabel = new JLabel("Height"); private JTextField heightField = new JTextField(5); private JButton calcButton = new JButton("Calculate"); private JTextArea displayArea = new JTextArea(2,20); // methods go here }
public OblongGUI() { setTitle("Oblong GUI"); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setLayout(new FlowLayout()); add(lengthLabel); add(lengthField); add(heightLabel); add(heightField); add(calcButton); add(displayArea); setSize(240, 135); setLocation(300,300); calcButton.addActionListener(this); setVisible(true); }
public void actionPerformed(ActionEvent e) { String lengthEntered = lengthField.getText(); String heightEntered = heightField.getText(); if(lengthEntered.length() == 0 || heightEntered.length() == 0) { displayArea.setText("Length and height must be entered"); } else { myOblong.setLength(Double.parseDouble(lengthEntered)); myOblong.setHeight(Double.parseDouble(heightEntered)); displayArea.setText("The area of the oblong is " + myOblong.calculateArea() + "\n" + "The perimeter of the oblong is " + myOblong.calculatePerimeter()); } } }
A metric converter JFrame inchCmPanel JPanel mileKmPanel JPanel poundKgPanel JPanel
Compound containers inchCmPanel JPanel JPanel inchCmButtons inchCmButtons.setLayout(new BorderLayout()); inchCmButtons.add("North", cmToInchButton); inchCmButtons.add("South", inchToCmButton); inchCmPanel.add(cmText); inchCmPanel.add(cmLabel); inchCmPanel.add(inchCmButtons); inchCmPanel.add(inchText); inchCmPanel.add(inchLabel);