28
Java Swing Kumar Harshit, USW

Java Swing

Embed Size (px)

DESCRIPTION

Java Swing Lecture Notes

Citation preview

Page 1: Java Swing

Java Swing

Kumar Harshit, USW

Page 2: Java Swing

A Simple Example

import javax.swing.JFrame; public class Simple extends JFrame {

public Simple() { setSize(300, 200); setTitle("Simple");

setDefaultCloseOperation(EXIT_ON_CLOSE); }

public static void main(String[] args) { Simple simple = new Simple(); simple.setVisible(true);

} }

Page 3: Java Swing

Anatomy

import javax.swing.JFrame; This is a top level container, which is used to place other

components.

setDefaultCloseOperation(EXIT_ON_CLOSE); This method will close the window.

Page 4: Java Swing

Adding Buttons to a Frame

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import javax.swing.JButton;

import javax.swing.JFrame;

import javax.swing.JPanel;

public class Buttons extends JFrame {

private Toolkit toolkit;

public Buttons() {

setTitle("Buttons");

setSize(300, 200);

setDefaultCloseOperation(EXIT_ON_CLOSE);

JPanel panel = new JPanel();

getContentPane().add(panel);

panel.setLayout(null);

JButton beep = new JButton("Beep");

beep.setBounds(150, 60, 80, 30);

//continued….

Page 5: Java Swing

Adding Buttons - II

beep.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent event) { toolkit.beep(); } });

JButton close = new JButton("Close");

close.setBounds(50, 60, 80, 30);

close.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent event) { System.exit(0); } });

panel.add(beep);

panel.add(close);

}

public static void main(String[] args) {

Buttons buttons = new Buttons();

buttons.setVisible(true);

}

}

Page 6: Java Swing

Anatomy of buttons example

Three new things to notice Add Panel to a Frame Layout Management Event Handling

Page 7: Java Swing

Buttons Example – Adding Panel

JPanel panel = new JPanel(); getContentPane().add(panel);

- We create a panel using JPanel, and then add the panel to the Frame.- Note that getContentPane() is a method of Jframe class.- getContentPane() method returns an object of type Container.- To the returned container object, add a panel, using add method of

Container class.- Components like textbox, button can be added to the panel

Page 8: Java Swing

Button Example – Layout Management

panel.setLayout(null); - A layout manager is used for laying out components.- By default, a panel has FlowLayout Manager. - setLayout(null) takes off layout manager from the panel. This means, we can

layout components as we wish

JButton beep = new JButton("Beep"); beep.setBounds(150, 60, 80, 30);

panel.add(beep); - 1st line, creates a button.- 2nd line, places a button on the panel using setBounds method.- 3rd line, adds a button to the panel.

Page 9: Java Swing

Button Example – Event Handling

beep.addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent event) {

toolkit.beep();

}

});

- ActionListener is an interface, and is a sub-interface of EventListener.- Above is an example of inner-class- We are creating a class which has no name, but it implements ActionListener interface.

Inorder to do so, it also provides implementation for the actionPerformed() method.- addActionLisener(), adds a Listener to the beep button.- To make the above example easier, please see next slide.

Page 10: Java Swing

Button Example – Event Handling

beep.addActionListener(new ButtonActionListener());

class ButtonActionListener implements ActionListener{

public void actionPerformed(ActionEvent event){

System.out.println("beep called");

}

}

- Create a new class ButtonActionListener, which implemetns Action Listener.- beep.addActionListener(new ButtonActionListener)

- this line adds a listener to the beep button, if an event occurs, an object of ButtonActionListener is created, and actionPerformed() method is invoked

Page 11: Java Swing

Adding Tooltip

In the previous example, add the following code– button.setToolTipText("A button component");

Page 12: Java Swing

Menu and Toolbars

To implement a menu-bar, use three classes– JMenubar– JMenu– JMenuItem

Page 13: Java Swing

How Menu Works

JMenuBar menubar = new JMenuBar(); Create an object of type JMenuBar

JMenu file = new JMenu("File"); Create an object of type JMenu

JMenuItem fileClose = new JMenuItem("Close", icon); Create an object of type JMenuItem

file.add(fileClose); Add menu-item to the menu.

menubar.add(file); Add menu to the MenuBar object.

setJMenuBar(menubar); Add menuBar to the Frame.

Page 14: Java Swing

Menu - Code

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import java.awt.event.KeyEvent;

import javax.swing.ImageIcon;

import javax.swing.JFrame;

import javax.swing.JMenu;

import javax.swing.JMenuBar;

import javax.swing.JMenuItem;

import javax.swing.UIManager;

public class Menu extends JFrame {

public Menu() {

setTitle("JMenuBar");

JMenuBar menubar = new JMenuBar();

ImageIcon icon = new ImageIcon("exit.png");

JMenu file = new JMenu("File");

file.setMnemonic(KeyEvent.VK_F);

//continued….. Next slide

Page 15: Java Swing

Menu – Code – Contd….

JMenuItem fileClose = new JMenuItem("Close", icon);

fileClose.setMnemonic(KeyEvent.VK_C);

fileClose.setToolTipText("Exit application");

fileClose.addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent event) {

System.exit(0);

});

file.add(fileClose);

menubar.add(file);

setJMenuBar(menubar);

setSize(250, 200);

setLocationRelativeTo(null);

setDefaultCloseOperation(EXIT_ON_CLOSE);

setVisible(true);

}

public static void main(String[] args) {

new Menu();

}

}

Page 16: Java Swing

SubMenu and Separator

JMenuBar menubar = new JMenuBar(); JMenu file = new JMenu("File"); JMenu imp = new JMenu("Import");

Imp.add(new JMenuItem(“import new feed….”)); Imp.add(new JMenuItem(“import bookmarks….”));

– Here file and imp are both menu and contain further menu-items.

file.add(new JMenuItem("New", iconNew)); file.add(new JMenuItem(“Open", iconNew)); file.addSeparator()

– This adds a separator after new and open, which are menu-items of file.

file.add(imp);– This adds a sub-menu to the File Menu, as shown in fig.

Page 17: Java Swing

How to create a PopUp Menu

menu = new JPopupMenu(); JMenuItem menuItemBeep = new JMenuItem("Beep"); menu.add(menuItemBeep); frame.addMouseListener(new MouseAdapter() {

public void mouseReleased(MouseEvent e) {

if (e.getButton() == e.BUTTON3) {

menu.show(e.getComponent(), e.getX(), e.getY()); }}});

Page 18: Java Swing

Swing Layout Management

No Manager Flowlayout Manager Gridlayout Manager Borderlayout Manager Boxlayout Manager

Page 19: Java Swing

No Layout Manager

This mean no layout manager is used. Components are laid out using explicit

values. Example on slide 3.

Page 20: Java Swing

FlowLayout Manager

The manager puts component in a row, in the order they are added.

If they don’t fit in a row, they are appended on the next row.

The components can be added left to right or vice versa.

Three constructors– FlowLayout() //by default, centered, 5px spaces– FlowLayout(int align)– FlowLayout(int align, int hgap, int vgap)

Page 21: Java Swing

Example of FlowLayout Manager

public class FlowLayoutExample extends JFrame {

public FlowLayoutExample() {

setTitle("FlowLayout Example");

JPanel panel = new JPanel();

JTextArea area = new JTextArea("text area");

area.setPreferredSize(new Dimension(100, 100));

JButton button = new JButton("button");

panel.add(button);

JTree tree = new JTree();

panel.add(tree);

panel.add(area);

add(panel);

pack();

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

setLocationRelativeTo(null);

setVisible(true); }

public static void main(String[] args) { new FlowLayoutExample(); } }

Page 22: Java Swing

Grid Layout Manager

It makes a grid, and lays out components in that grid.

One component is placed in each rectangle.

Page 23: Java Swing

Example: Grid Layout Manager

Get a panel object– JPanel p = new JPanel()

Create grid layout manager– GridLayout gl = new GridLayout()

Add gridlayout to the panel– p.setLayout(gl)

Constructor– GridLayout(int rows, int cols, int hgap, int vgap)

Page 24: Java Swing

Example – Grid Layout Manager

public class GridLayoutExample extends JFrame {

public GridLayoutExample() {

setTitle("GridLayout");

JPanel panel = new JPanel();

panel.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5)); panel.setLayout(new GridLayout(5, 4, 5, 5));

String[] buttons = { "Cls", "Bck", "", "Close", "7", "8", "9", "/", "4", "5", "6", "*", "1", "2", "3", "-", "0", ".", "=", "+" };

for (int i = 0; i < buttons.length; i++) {

if (i == 2) panel.add(new JLabel(buttons[i]));

else panel.add(new JButton(buttons[i]));

}

add(panel);

setSize(350, 300);

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

setLocationRelativeTo(null);

setVisible(true); }

public static void main(String[] args) { new GridLayoutExample(); } }

Page 25: Java Swing

Border Layout Manager

Divides spaces into 5 regions– North, West, South, East, and Centre

Can add only one component in one region If we want to add more than one component

in one reigion, then add a panel to that region

Page 26: Java Swing

Example: Border Layout

public class BorderLayoutExample extends JFrame {

public BorderLayoutExample() {

setTitle("BorderLayout");

JMenuBar menubar = new JMenuBar();

JMenu file = new JMenu("File");

menubar.add(file);

setJMenuBar(menubar);

JToolBar toolbar = new JToolBar();

toolbar.setFloatable(false);

ImageIcon exit = new ImageIcon("exit.png");

JButton bexit = new JButton(exit);

bexit.setBorder(new EmptyBorder(0 ,0, 0, 0));

toolbar.add(bexit);

add(toolbar, BorderLayout.NORTH);

//contd…

Page 27: Java Swing

Example: Border Layout – Contd..

JToolBar vertical = new JToolBar(JToolBar.VERTICAL);

vertical.setFloatable(false);

vertical.setMargin(new Insets(10, 5, 5, 5));

ImageIcon select = new ImageIcon("drive.png");

ImageIcon freehand = new ImageIcon("computer.png");

ImageIcon shapeed = new ImageIcon("printer.png");

JButton selectb = new JButton(select);

selectb.setBorder(new EmptyBorder(3, 0, 3, 0));

JButton freehandb = new JButton(freehand);

freehandb.setBorder(new EmptyBorder(3, 0, 3, 0));

JButton shapeedb = new JButton(shapeed);

shapeedb.setBorder(new EmptyBorder(3, 0, 3, 0));

vertical.add(selectb);

vertical.add(freehandb);

vertical.add(shapeedb);

//contd…

Page 28: Java Swing

Example: Border Layout – Contd..

add(vertical, BorderLayout.WEST);

add(new JTextArea(), BorderLayout.CENTER);

JLabel statusbar = new JLabel(" Statusbar");

statusbar.setPreferredSize(new Dimension(-1, 22)); statusbar.setBorder(LineBorder.createGrayLineBorder());

add(statusbar, BorderLayout.SOUTH);

setSize(350, 300);

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

setLocationRelativeTo(null);

setVisible(true);

}

public static void main(String[] args) {

new BorderLayoutExample();

}

}