Survey
* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
Lecture Notes CPSC 224 (Spring 2012) Today • Quiz 6 • Start on Java Swing Homework • hw5 out Reading • Ch 7: 281-299 • Ch 8: 323-330 S. Bowers 1 of 10 Lecture Notes CPSC 224 (Spring 2012) GUI programming in Java Early versions of Java used the “AWT” • Abstract Window Toolkit • an API over underlying graphics support of platform (Win, Mac, Linux, etc.) “Swing” extends AWT • richer API • more consistent “look and feel” • native “look and feels” • more widgets S. Bowers 2 of 10 Lecture Notes CPSC 224 (Spring 2012) JPanels A JPanel is called either a “panel” or “pane” • a general-purpose container for widgets • widgets added using panel.add(widget) ... depending on layout manager • panels are also widgets ... so can be added to panes • basic operations: – add(Comonent c) – getComponent(int i) – remove(int i) – set the background color – set the layout manager (more later) – lots more! NOTE: You are expected to look up the classes we discuss in the Java API ... we can’t cover all the methods/uses in class S. Bowers 3 of 10 Lecture Notes CPSC 224 (Spring 2012) JFrames A JFrame is a top-level window import javax.swing.*; public class Lab { public static void main(String[] args) { JFrame f = new JFrame("Test"); f.setSize(300, 300); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); f.setVisible(true); } } • set/get the size • set/get the window title • add widgets to the “content” pane • add/set the menu bar • and so on JFrame anatomy: • root pane manages the interior of the pane (the other panes) • layered pane for puting widgets on top of or behind other widgets • menu bar (optional) is for menu items (File → Save, Edit → Copy, etc.) • content pane is the visible widgets of the frame, panes added using frame.add(...) • glass pane is used to intercept events before the content pane S. Bowers 4 of 10 Lecture Notes CPSC 224 (Spring 2012) Example Widgets: JTextArea Used for getting/displaying multiple lines of text import javax.swing.*; public class Lab { public static void main(String[] args) { JFrame f = new JFrame("Test"); f.setSize(300, 300); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); JTextArea textArea = new JTextArea(20, 40); f.add(textArea); f.pack(); f.setVisible(true); } } Various operations for a JTextArea • append a string • set line wrapping • get text • get selected text • set whether editable • and so on S. Bowers 5 of 10 Lecture Notes CPSC 224 (Spring 2012) Adding Scroll Bars to a Text Area Here we can use a JScrollPane widget import javax.swing.*; public class Lab { public static void main(String[] args) { JFrame f = new JFrame("Test"); f.setSize(300, 300); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); JTextArea textArea = new JTextArea(20, 40); JScrollPane scrollPane = new JScrollPane(textArea); f.add(scrollPane); f.pack(); f.setVisible(true); } } Setting the horizontal and vertical scroll policy • as needed, never, always ... by scroll bar scrollPane.setVerticalScrollBarPolicy( ScrollPaneConstants.VERTICAL SCROLLBAR ALWAYS); S. Bowers 6 of 10 Lecture Notes CPSC 224 (Spring 2012) Dialog Boxes Displaying simple errors, warnings, messages, etc. using JOptionPane JOptionPane.showMessageDialog(...) – shows a message, waits for user to click OK JOptionPane.showConfirmDialog(...) – shows a message and gets confirmation (OK, cancel, etc.) JOptionPane.showOptionDialog(...) – shows a message and gets users choice from a set of options JOptionPane.showInputDialog(...) – shows a message and gets a line of user input import javax.swing.*; public class Lab { public static void main(String[] args) { JFrame f = new JFrame("Test"); f.setSize(300, 300); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); f.setVisible(true); JOptionPane.showMessageDialog(f, "Welcome to Swing"); JOptionPane.showMessageDialog(f, "Hi", "Title", JOptionPane.PLAIN_MESSAGE); } } • Types of messages: ERROR MESSAGE, INFORMATION MESSAGE, WARNING MESSAGE, QUESTION MESSAGE, or PLAIN MESSAGE S. Bowers 7 of 10 Lecture Notes CPSC 224 (Spring 2012) Basic Class Organization Create JFrame or JPanel subclasses for windows/panes • main creates the main application frame • each JFrame or JPanel class becomes a reusable, specialized widget public class App { public static void main(String[] args) { ... JFrame frame = new MyJFrame(...); ... } } public class MyJFrame extends JFrame { public MyJFrame(...) { initFrame(); ... } private void initFrame() { ... } } public class MyPane extends JPanel { public MyPane() { initPane(); } private void initPane() { ... } } S. Bowers 8 of 10 Lecture Notes CPSC 224 (Spring 2012) Buttons Create buttons using the JButton class import javax.swing.*; import java.awt.event.*; public class Lab { public static void main(String[] args) { JFrame f = new JFrame("Test"); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); f.add(new PanicPane()); f.pack(); f.setVisible(true); } } import javax.swing.*; import java.awt.event.*; public class PanicPane extends JPanel implements ActionListener { private JButton button1 = new JButton("Panic"); private JButton button2 = new JButton("Don’t Panic"); public PanicPane() { initPane(); } private void initPane() { button1.addActionListener(this); button2.addActionListener(this); add(button1); S. Bowers 9 of 10 Lecture Notes CPSC 224 (Spring 2012) add(button2); } public void actionPerformed(ActionEvent e) { if(e.getSource() == button1) System.out.println("Panic"); else System.out.println("Don’t Panic"); } } Exercise • Instead of printing ... • Display a dialog box with a message depending on button clicked S. Bowers 10 of 10