1. Generic (JComponent) services

skatechildrenSoftware and s/w Development

Nov 3, 2013 (4 years and 1 month ago)

54 views

1



1. Generic (JComponent) services

2. Atomic Swing components

3. Containers

4. Drawing primitives

2

Component Services

All (?) Swing
-
components, except top
-
level containers,

inherit from JComponent, Container and Component

Main services

Customizing Component Appearance

Setting Component State



get/set foreground/background colour



get/set font



get/set border



specify/get opaqueness



setting tooltips



(in)activate component



control visibility

3

Component Services

Handling Events

Painting Components

Containment Hierarchy



(de)registration of event listeners



check if pixel is part of component



check to which component pixel belongs



repaint() : request to repaint the components



revalidate() : request to lay out again component



paintComponent() : overridden method for custom drawing



add/remove components from container



get contained components in container

4

Component Services

Laying Out Components



get/set preferred, maximum and minimum sizes



get set alignment mode



get/set layoutmanager

5

Examples :

Setting Tooltips

JComponent :




void setToolTipText(String)

class ToolTip extends JFrame {


JButton change = new JButton("Switch");


ToolTip(String title) {



super(title);



Container cp=getContentPane();



cp.setLayout(new FlowLayout());



change.setToolTipText("Press to switch");



cp.add(change);


}

}

public class TooltipTest {


public static void main(String[] args) {


ToolTip app=new ToolTip("Setting tooltips");


app.setSize(200,100);


app.setVisible(true);



app.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);


}

}

6

Examples :

Controlling Look and Feel

Look and feel options



swing : default


or : getCrossPlatformLookAndFeelClassName()



motif : “com.sun.java.swing.plaf.motif.MotifLookAndFeel”



system : getSystemLookAndFeelClassName()

Format


try {



UIManager.setLookAndFeel( ……);


} catch(Exception e) { }



before instantiating visible components



don’t change L&F during program execution ! (possible but difficult)

7

Examples :

Controlling Look and Feel

class LF extends JFrame {


JButton change = new JButton("Switch");


LF(String title) {



super(title);



Container cp=getContentPane();



cp.setLayout(new FlowLayout());



change.setToolTipText("Press to switch");



cp.add(change);


}

}

public class LookAndFeelTest {


public static void main(String[] args) {


try {


// UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());


UIManager.setLookAndFeel("com.sun.java.swing.plaf.motif.MotifLookAndFeel");


} catch(Exception e) { }


LF app=new LF("Trying different L&F's");


app.setSize(200,100);


app.setVisible(true);


app.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);


}

}

8

Examples :

Adding Borders

Types of borders



TitledBorder



EtchedBorder



EmptyBorder



BevelBorder



LineBorder



SoftBevelBorder



MatteBorder



CompoundBorder

How ?



Construct a Border
-
object



invoke setBorder(…) on the relevant JComponent

Inherit from AbstractBorder,

Implementing the Border interface

import javax.swing.border.*;

9

Examples :

Adding Borders

class BorderT extends JFrame {


private static int num=5;


private JButton[] b=new JButton[num];


public BorderT(String title) {



super(title);



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




b[i]=new JButton("Button "+i);



}



b[1].setBorder(new TitledBorder("Border Title"));



b[2].setBorder(new EtchedBorder());



b[3].setBorder(new LineBorder(Color.red));



b[4].setBorder(new BevelBorder(BevelBorder.RAISED));



getContentPane().setLayout(new FlowLayout());



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




getContentPane().add(b[i]);





}


} // End of class BorderT

10

Binary choices

No state

State

JButton

JToggleButton

JRadioButton

JCheckBox

11

Multivalued choices

>1 alternative

1 alternative at most



JList



list of buttons



JMenu



JList (after setting seletion mode)



JComboBox



list of buttons added to ButtonGroup



JMenu (JRadioButtonMenuItem, JCheckBoxMenuItem)

12

Multivalued choices

JList

JMenu

JComboBox (non
-
editable)

JComboBox (editable)

13

Multivalued choices

“continuous” value

JSlider

Fires ChangeEvents when value changes

14

Multivalued choices

class SliderT extends JFrame {


private JSlider s=new JSlider(0,100,70);


private JLabel output=new JLabel("Value = 70");


public SliderT(String title) {



super(title);



Container cp=getContentPane();



s.setPaintTicks(true);



s.setMinorTickSpacing(5);



s.setMajorTickSpacing(20);



cp.setLayout(new GridLayout(2,1));



cp.add(s);



cp.add(output);



ChangeListener c=new ChangeListener() {




public void stateChanged(ChangeEvent e) {





output.setText("Value = "+s.getValue());




}



};



s.addChangeListener(c);


}


} // End of class SliderT

15

Text

1 line



JTextField

>= 1 line



JTextArea (plain text)



JEditorPane (styled text)



JTextPane (styled text)

16

Text

JTextArea

JTextPane



several styles



embedded pictures



displays HTML

[Sun, Swing Tutorial]

17

Output only ...



JLabel



JProgressBar







Tool tips

18

Output only ...

class ProgressT extends JFrame {


private JProgressBar pb=new JProgressBar(0,20);


private JButton start=new JButton("(Re)Start");


private JButton next=new JButton("Next");


private int count=0;


public ProgressT(String title) {



super(title);Container cp=getContentPane();



cp.setLayout(new GridLayout(3,1));



cp.add(pb);cp.add(next);cp.add(start);



pb.setStringPainted(true);



next.addActionListener(new ActionListener() {




public void actionPerformed(ActionEvent e){




pb.setValue(++count);if(count==20) next.setEnabled(false);




}



});



start.addActionListener(new ActionListener(){




public void actionPerformed(ActionEvent e){




count=0;pb.setValue(0);next.setEnabled(true);




}




});


}


} // End of class ProgressT

19

Formatted Information



JColorChooser



getColor returns

color choosen



class can create

dialog

20

Formatted Information



JColorChooser

class ColorT extends JFrame {


private JColorChooser cc=new JColorChooser();


public ColorT(String title) {



super(title);



Container cp=getContentPane();



cp.add(cc,BorderLayout.CENTER);


}


} // End of class ColorT

21

Formatted Information



JFileChooser



JTable



JTree

[Sun, Swing Tutorial]

22

Intermediate Containers



JPanel



used to group components



behavior inherited from Container



LayoutManager



methods to add/remove Jcomponents



invisible by default

23

Intermediate Containers


class PanelT extends JFrame {


private JPanel left=new JPanel();


private JPanel right=new JPanel();


public PanelT(String title) {



super(title);Container cp=getContentPane();



cp.setLayout(new GridLayout(1,2));



left.setLayout(new GridLayout(3,1));



right.setLayout(new GridLayout(3,1));



left.setBorder(new TitledBorder("Left Panel"));



right.setBorder(new TitledBorder("Right Panel"));




left.add(new JButton("A"));




left.add(new JSlider(0,100,75));




left.add(new JCheckBox("Check me ..."));



cp.add(left);




right.add(new JToggleButton("B"));




right.add(new JProgressBar(0,100));




right.add(new JRadioButton("Click me ..."));



cp.add(right);


}


} // End of class PanelT

24

Intermediate Containers



JScrollPane


Adds scroll bars (if needed) to any JComponent



JScrollPane scrollLeft=new JScrollPane(left);

cp.add(scrollLeft);

...

25

Intermediate Containers



JTabbedPane

Used to realize hierarchy and

save space

26

Intermediate Containers

class TabbedPaneT extends JFrame {


private JPanel left=new JPanel();


private JPanel right=new JPanel();


public TabbedPaneT(String title) {



super(title);



Container cp=getContentPane();



JTabbedPane tp=new JTabbedPane();




left.setLayout(new GridLayout(3,1));




right.setLayout(new GridLayout(3,1));




left.add(new JButton("A"));




left.add(new JSlider(0,100,75));




left.add(new JCheckBox("Check me ..."));




right.add(new JToggleButton("B"));




right.add(new JProgressBar(0,100));




right.add(new JRadioButton("Click me ..."));



tp.addTab("Left",left);



tp.addTab("Right",right);



cp.add(tp);





}


} // End of class TabbedPaneT

27

Intermediate Containers



JSplitPane

Used to divide area in 2, allowing splitting

ratio to vary

28

Intermediate Containers

class SplitPaneT extends JFrame {


private JPanel left=new JPanel();


private JPanel right=new JPanel();


public SplitPaneT(String title) {



super(title);



Container cp=getContentPane();




left.setLayout(new GridLayout(3,1));




right.setLayout(new GridLayout(3,1));




left.add(new JButton("A"));




left.add(new JSlider(0,100,75));




left.add(new JCheckBox("Check me ..."));




right.add(new JToggleButton("B"));




right.add(new JProgressBar(0,100));




right.add(new JRadioButton("Click me ..."));




JSplitPane sp=new JSplitPane(





JSplitPane.HORIZONTAL_SPLIT,left,right);




sp.setOneTouchExpandable(true);



cp.add(sp);


}


} // End of class SplitPaneT

29

Intermediate Containers



JToolBar

Graphical presentation of menu

Icon based

[Sun, Swing Tutorial]

30

Top
-
level Containers



JFrame


-
> Base class for stand alone applications



JApplet


-
> Base class for applets



JDialog


-
> Can pop up from other Container


-
> no exit when Dialog closes

Can have menu bars

31

Concept



every JComponent has a paintComponent method


responsible of drawing the component on the screen



paintComponent is automatically called by container


object


In practice

(1) define a class extending JPanel

(2) define a drawing method with signature


public void paintComponent(Graphics g) {



super.paintComponent(g);



// drawing operations


}

(3) make an object of this class, and add it to some container

32

Graphical Context

“physical” area where component can be painted














(0,0)

(0,200)

(500,200)

(500,0)

pixel (“picture element”)

33

Drawing Primitives

Pen Color

Operations



public void setColor(Color c)



public Color getColor()

(x
1
,y
1
)

(x
2
,y
2
)

g.drawLine(x1,y1,x2,y2);

g.setColor(Color.green);



public abstract void drawLine(int x1, int y1, int x2, int y2)

Graphics object

Lines

34

Drawing Primitives

Rectangles

(x
1
,y
1
)

b

h

g.drawRect(x1,y1,b,h);

g.fillRect(x1,y1,b,h);



public abstract void drawRect(int x1, int y1, int b, int h)



public abstract void fillRect(int x1, int y1, int b, int h)

35

Drawing Primitives

Ovals

(x
1
,y
1
)

b

h

g.drawOval(x1,y1,b,h);

g.fillOval(x1,y1,b,h);



public abstract void drawOval(int x1, int y1, int b, int h)



public abstract void fillOval(int x1, int y1, int b, int h)

36

Drawing Primitives

Arcs

(x
1
,y
1
)

b

h

g.drawArc(x1,y1,b,h,s,a);

g.fillArc(x1,y1,b,h,s,a);



public abstract void drawArc(int x1, int y1, int b, int h,int s, int a)



public abstract void fillArc(int x1, int y1, int b, int h,int s, int a)

s

a

37

Drawing Primitives

Polygons

(x[0],y[0])

(x[2],y[2])

(x[1],y[1])

(x[3],y[3])

g.drawPolyline(x,y,4);

g.drawPolygon(x,y,4);

g.fillPolygon(x,y,4);



public abstract void drawPolyline(int[] x, int[] y, int n)



public abstract void drawPolygon(int[] x, int[] y, int n)



public abstract void fillPPolygon(int[] x, int[]y, int n)

38

Example


class MyDrawing extends JPanel {


public void paintComponent(Graphics g) {



super.paintComponent(g);



g.setColor(Color.red);



g.drawLine(0,0,100,100);



g.setColor(Color.blue);



g.drawOval(50,50,150,150);


}

} // End of class MyDrawing


class DrawingT extends JFrame {


private MyDrawing d=new MyDrawing();


public DrawingT(String title) {



super(title);



Container cp=getContentPane();



cp.add(d);





}


} // End of class DrawingT


39

Drawing Primitives

Text

Font



public void setFont(Font f)



public Font getFont()

Draw

(x,y)

g.drawString(“Message”,x,y);

Message



public abstract void drawString(String s, int x, int y)

40

Specifying Fonts

Font characteristics

type

style

size

Options :



Dialog



DialogInput



Monospaced



Serif



SansSerif



Symbol

PLAIN

BOLD

ITALIC

41

Specifying Fonts

Constructor



public Font(String name, int style, int size)

Examples

Font f1 = new Font(“Dialog”,Font.PLAIN,10);

Font f2 = new Font(“Serif”, Font.BOLD, 14);

Font f3 = new Font(“Dialog”,Font.BOLD||Font.ITALIC, 20);