You are on page 1of 16

2/12/2009

Graphical User
Interface (GUI)
Συστατικά Γραφικού Περιβάλλοντος Χρήστη σε Java

Επισκόπηση
 Βασικά συστατικά GUI
◦ JLabel
◦ JTextField
◦ JButton
◦ JCheckBox
◦ JMenu
◦ JList
 Χειρισµός Συµβάντων
 ∆ιαχείριση ∆ιάταξη

1
2/12/2009

Βασικά συστατικά GUI

Συστατικό Περιγραφή
JLabel Περιοχή όπου µη επεξεργασµένο κείµενο µπορεί
να προβληθεί
JTextField Περιοχή εισαγωγής δεδοµένων από τον χρήστη
JButton Περιοχή που πυροδοτεί ένα συµβάν όταν δεχθεί
κλικ
JCheckBox Περιοχή επιλογής ή µη επιλογής του στοιχείου
JMenu Περιοχή προβολής των menu

Βασικά συστατικά GUI


1.
2.
public class LabelTest extends JFrame {
private JLabel label1, label2, label3; JLabel(1/
JLabel (1/3
3)
3. public LabelTest()
4. {
5. super( "Testing JLabel" );

6. Container c = getContentPane();
7. c.setLayout( new FlowLayout() );

8. // JLabel constructor with a string argument


9. label1 = new JLabel( "Label with text" );
10. label1.setToolTipText( "This is label1" );
11. c.add( label1 );

12. // JLabel constructor with string, Icon and


13. // alignment arguments
14. Icon bug = new ImageIcon( "bug1.gif" );
15. label2 = new JLabel( "Label with text and icon",bug );
16. label2.setToolTipText( "This is label2" );
17. c.add( label2 );

18. // JLabel constructor no arguments


19. label3 = new JLabel();
20. label3.setText( "Label with icon and text at bottom" );
21. label3.setIcon( bug );
22. label3.setHorizontalTextPosition(SwingConstants.CENTER );
23. c.add( label3 );

24. setSize( 275, 170 );


25. show();
26. }

2
2/12/2009

Βασικά συστατικά GUI


1.
2.
public class LabelTest extends JFrame {
private JLabel label1, label2, label3; JLabel((2/3)
JLabel
3. public LabelTest()
{
Container : ορίζει έναν φορέα (παράθυρο)
4.
5. super( "Testing JLabel" );

6. Container c = getContentPane();
7. c.setLayout( new FlowLayout() );

8. // JLabel constructor with a string argument


setLayout(Layout): ορίζει την διάταξη του
9.
10.
label1 = new JLabel( "Label with text" );
label1.setToolTipText( "This is label1" ); φορέα (την διάταξη του αντικειµένου
11. c.add( label1 );
Container)
12. // JLabel constructor with string, Icon and
13. // alignment arguments
14. Icon bug = new ImageIcon( "bug1.gif" );
15. label2 = new JLabel( "Label with text and icon",bug);
16. label2.setToolTipText( "This is label2" );
17. c.add( label2 );
add.(Component): εισάγει το αντικείµενο
18.
19.
// JLabel constructor no arguments
label3 = new JLabel(); στον Container
20. label3.setText( "Label with icon and text at bottom" );
21. label3.setIcon( bug );
22. label3.setToolTipText( "This is label3" );
23. c.add( label3 );

24. setSize( 275, 170 );


25. show();
26. }

Βασικά συστατικά GUI


1.
2.
public class LabelTest extends JFrame {
private JLabel label1, label2, label3; JLabel((3/3)
JLabel
3. public LabelTest()
4. {
5. super( "Testing JLabel" );

6. Container c = getContentPane();
7. c.setLayout( new FlowLayout() );

8. // JLabel constructor with a string argument


9. label1 = new JLabel( "Label with text" );
10. label1.setToolTipText( "This is label1" );
11. c.add( label1 );

12. // JLabel constructor with string, Icon and


13. // alignment arguments
14. Icon bug = new ImageIcon( "bug1.gif" );
15. label2 = new JLabel( "Label with text and icon",bug);
16. label2.setToolTipText( "This is label2" );
17. c.add( label2 );

18. // JLabel constructor no arguments


19. label3 = new JLabel();
20. label3.setText( "Label with icon and text at bottom" );
21. label3.setIcon( bug );
22. label3.setToolTipText( "This is label3" );
23. c.add( label3 );

24. setSize( 275, 170 );


25. show();
26. }

3
2/12/2009

Βασικά συστατικά GUI


1.
2.
JTextField (1/2)
public class TextFieldTest extends JFrame {
private JTextField text1, text2, text3;
3. public TextFieldTest()
4. {
5. super( "Testing JTextField" );

6. Container c = getContentPane();
7. c.setLayout( new FlowLayout() );

8. // construct textfield with default sizing


9. text1 = new JTextField( 10 );
10. c.add( text1 );

11. // construct textfield with default text


12. text2 = new JTextField( "Enter text here" );
13. c.add( text2 );

14. // construct textfield with default text and


15. // 20 visible elements and no event handler
16. text3 = new JTextField( "", 20 );
17. text3.setEditable( false );
18. c.add( text3 );

19. setSize( 325, 100 );


20. show();
21. }}

Βασικά συστατικά GUI


1.
2.
JTextField (2/2)
public class TextFieldTest extends JFrame {
private JTextField text1, text2, text3;
3. public TextFieldTest()
4. {
5. super( "Testing JTextField" );

6. Container c = getContentPane();
7. c.setLayout( new FlowLayout() );

8. // construct textfield with default sizing


9. text1 = new JTextField( 10 );
10. c.add( text1 );

11. // construct textfield with default text


12. text2 = new JTextField( "Enter text here" );
13. c.add( text2 );

14. // construct textfield with default text and


15. // 20 visible elements and no event handler
16. text3 = new JTextField( "", 20 );
17. text3.setEditable( false );
18. c.add( text3 );

19. setSize( 325, 100 );


20. show();
21. }}

4
2/12/2009

Βασικά συστατικά GUI


1.
2.
JButton (1/2)
public class ButtonTest extends JFrame {
private JButton plainButton, fancyButton;

3. public ButtonTest()
4. {
5. super( "Testing Buttons" );

6. Container c = getContentPane();
7. c.setLayout( new FlowLayout() );

8. // create buttons
9. plainButton = new JButton( "Plain Button" );
10. c.add( plainButton );

11. Icon bug1 = new ImageIcon( "bug1.gif" );


12. Icon bug2 = new ImageIcon( "bug2.gif" );
13. fancyButton = new JButton( "Fancy Button", bug1 );
14. fancyButton.setRolloverIcon( bug2 );
15. c.add( fancyButton );
16. setSize( 275, 100 );
17. show();
18. }}

Βασικά συστατικά GUI


1.
2.
JButton (2/2)
public class ButtonTest extends JFrame {
private JButton plainButton, fancyButton;

3. public ButtonTest()
4. {
5. super( "Testing Buttons" );

6. Container c = getContentPane();
7. c.setLayout( new FlowLayout() );

8. // create buttons
9. plainButton = new JButton( "Plain Button" );
10. c.add( plainButton );

11. Icon bug1 = new ImageIcon( "bug1.gif" );


12. Icon bug2 = new ImageIcon( "bug2.gif" );
13. fancyButton = new JButton( "Fancy Button", bug1 );
14. fancyButton.setRolloverIcon( bug2 );
15. c.add( fancyButton );
16. setSize( 275, 100 );
17. show();
18. }}

5
2/12/2009

Βασικά συστατικά GUI


1.
2.
public class CheckBoxTest extends JFrame {
private JTextField t;
JCheckBox
3. private JCheckBox bold, italic;

4. public CheckBoxTest()
5. {
6. super( "JCheckBox Test" );

7. Container c = getContentPane();
8. c.setLayout(new FlowLayout());

9. // create checkbox objects


10. check1 = new JCheckBox( "CheckBox1" );
11. c.add(check1 );

12. check2 = new JCheckBox( "CheckBox2" );


13. c.add(check2 );
14. show();
15. }

Βασικά συστατικά GUI


1.
2.
class Mymenu {
JTextField t;
JMenu (1/2)
3. JMenuBar mb;
4. JMenu file,edit,font;
5. JMenuItem nw,cl,cp,pt;
6. JCheckBoxMenuItem pr;
7. Mymenu(){
8. Container c = getContentPane();
9. c.setLayout(new BorderLayout());
10. mb = new JMenuBar();
11. c.add("North",mb);
12. file = new JMenu("FILE");
13. mb.add(file);
14. nw = new JMenuItem("NEW");
15. cl = new JMenuItem("CLOSE");
16. file.add(nw);
17. file.add(cl);
18. file.addSeparator();
19. font = new JMenu("FONT");
20. file.add(font);
21. font.add("Arial");
22. font.add("Times new Roman");
23. }

6
2/12/2009

Βασικά συστατικά GUI


1.
2.
class Mymenu {

JMenu (2/2)
3. edit = new JMenu("EDIT");
4. mb.add(edit);
5. cp = new JMenuItem("COPY");
6. pt = new JMenuItem("PASTE");
7. edit.add(cp);
8. edit.add(pt);
9. cl.setEnabled(true);
10. nw.addActionListener(this);
11. cl.addActionListener(this);
12. cp.addActionListener(this);
13. pt.addActionListener(this);
14.
15. t = new JTextField(15);
16. c.add("South",t);
17. setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
18. }

Βασικά συστατικά GUI


1.
2.
public class SwingSimpleList extends JFrame
{
JList
3. String label[] = { "Zero", "One", "Two",
4. "Three", "Four", "Five", "Six“,"Seven", "Eight", "Nine",
"Ten", "Eleven" };

5. JList list;

6. public SwingSimpleList() {
7. super("SwingSimpleList");
8. Container c = getContentPane();
9. c.setLayout(new BorderLayout());
10. list = new JList(label);
11. JButton button = new JButton("Print");
12. button.addActionListener(new PrintListener());
13. c.add(list, BorderLayout.CENTER);
14. c.add(button, BorderLayout.SOUTH);
15. setSize(200, 300);
16. show();
17. }}

7
2/12/2009

Χειρισµός Συµβάντων
Τα GUI δηµιουργούν συµβάντα όταν ο
χρήστης αλληλεπιδρά µε αυτά ( κλικ
του ποντικιού, κλικ κουµπιού)

πως γίνεται;
1. καταχώριση ενός αντικειµένου
παρακολούθησης συµβάντων (Handler)

2. υλοποίηση ενός χειρισµού συµβάντων


(actionPerformed)

Βασικά συστατικά GUI


JTextField & events (1/2)

1. private class TextFieldHandler implements ActionListener {


2. public void actionPerformed( ActionEvent e ){
3. if ( e.getSource() == text1 )
4. text3.setText(e.getActionCommand());
5.
6. else if ( e.getSource() == text2 )
7. text3.setText(e.getActionCommand());
8.
9. }
10. }

8
2/12/2009

Βασικά συστατικά GUI


JTextField & events (2/2)
1. public class TextFieldTest extends JFrame {
2. private JTextField text1, text2, text3;
3. public TextFieldTest(){
4. super( "Testing JTextField and JPasswordField" );
5. Container c = getContentPane();
6. c.setLayout( new FlowLayout() );

1. text1 = new JTextField( 10 );


2. c.add( text1 );

3. text2 = new JTextField( "Enter text here" );


4. c.add( text2 );

5. text3 = new JTextField( "", 20 );


6. text3.setEditable( false );
7. c.add( text3 );

1. TextFieldHandler handler = new TextFieldHandler();


2. text1.addActionListener( handler );
3. text2.addActionListener( handler );
4. text3.addActionListener( handler );
5. setSize( 325, 100 );
6. show();
7. }

Βασικά συστατικά GUI


JButton & events (1/2)

1. private class ButtonHandler implements ActionListener


2. {
3. public void actionPerformed( ActionEvent e )
4. {
5. JOptionPane.showMessageDialog( null,
6. "You pressed: " + e.getActionCommand() );
7. }
8. }

9
2/12/2009

Βασικά συστατικά GUI


1.
JButton & events (1/2)
public class ButtonTest extends JFrame {
2. private JButton plainButton, fancyButton;

3. public ButtonTest()
4. {
5. super( "Testing Buttons" );

6. Container c = getContentPane();
7. c.setLayout( new FlowLayout() );

1. plainButton = new JButton( "Plain Button" );


2. c.add( plainButton );

3. Icon bug1 = new ImageIcon( "bug1.gif" );


4. Icon bug2 = new ImageIcon( "bug2.gif" );
5. fancyButton = new JButton( "Fancy Button", bug1 );
6. fancyButton.setRolloverIcon( bug2 );
7. c.add( fancyButton );

8. // create an instance of inner class ButtonHandler


9. // to use for button event handling
10. ButtonHandler handler = new ButtonHandler();
11. fancyButton.addActionListener( handler );
12. plainButton.addActionListener( handler );

13. setSize( 275, 100 );


14. show(); }

Βασικά συστατικά GUI


JMenu & events
1. class Mymenu extends JFrame implements ActionListener{
2. Mymenu(){
3. …
4. nw.addActionListener(this);
5. cl.addActionListener(this);
6. cp.addActionListener(this);
7. pt.addActionListener(this);
8. }

9. public void actionPerformed(ActionEvent a){


10. t.setText(((JMenuItem) a.getSource()).getText());
11. }
12. }

10
2/12/2009

Βασικά συστατικά GUI


JList & events(1/2)
1. class PrintListener implements ActionListener {
2. public void actionPerformed(ActionEvent e) {
3.

4. int selected[] = list.getSelectedIndices();


5. for (int i = 0; i < selected.length; i++) {
6. String element = (String)
list.getModel().getElementAt(selected[i]);
7.
8. JOptionPane.showMessageDialog(rootPane, "You
pressed: " + element);
9. }
10. }}

Βασικά συστατικά GUI


JList & events(2/2)
1. public class SwingSimpleList extends JFrame {
2. String label[] = { "Zero", "One", "Two", "Three",
3. "Four", "Five", "Six","Seven", "Eight", "Nine", "Ten",
"Eleven" };

4. JList list;

5. public SwingSimpleList() {
6. super("SwingSimpleList");
7. Container c = getContentPane();
8. c.setLayout(new BorderLayout());
9. list = new JList(label);
10. JButton button = new JButton("Print");
11. button.addActionListener(new PrintListener());
12. c.add(list, BorderLayout.CENTER);
13. c.add(button, BorderLayout.SOUTH);
14. setSize(200, 300);
15. show();
16. }

11
2/12/2009

∆ιαχείριση ∆ιάταξη (1/4)


Οι διαχειρίσεις διάταξης τακτοποιούν τα
συστατικά GUI (Components) σε έναν φορέα
(Container), µε συγκεκριµένη διάταξη.

∆ιαχείριση διάταξης Περιγραφή


FlowLayout Τοποθετεί τα συστατικά σειριακά (αριστερά
προς δεξιά)
BorderLayout Τακτοποιεί τα συστατικά σε πέντε περιοχές:
North, South, East, West και Center
GridLayout Τακτοποιεί τα συστατικά σε σειρές και στήλες

∆ιαχείριση ∆ιάταξη (2/4)

1. Container c = getContentPane();
2. c.setLayout( new FlowLayout() );
3. c.add( LeftButton );
4. c.add( CenterButton );
5. c.add( RightButton );

12
2/12/2009

∆ιαχείριση ∆ιάταξη (3
(3/4)

1. Container c = getContentPane();
2. c.setLayout(new BorderLayout( 5, 5 ));
3. //τα ορίσµατα καθορίζουν το πλήθος των pixels ανάµεσα
//στα συστατικά που τακτοποιούνται
4. c.add( b[ 0 ], BorderLayout.NORTH ); // North position
5. c.add( b[ 1 ], BorderLayout.SOUTH ); // South position
6. c.add( b[ 2 ], BorderLayout.EAST ); // East position
7. c.add( b[ 3 ], BorderLayout.WEST ); // West position
8. c.add( b[ 4 ], BorderLayout.CENTER ); // Center position

∆ιαχείριση ∆ιάταξη (4/4)

1. Container c = getContentPane();
2. c.setLayout(new GridLayout( 2, 3, 5, 5 ));
3. //τα ορίσµατα καθορίζουν
4. // (2) σειρές
5. // (3) στήλες
6. // (5) pixels οριζόντιου διαστήµατος
7. // (5) pixels κατακόρυφου διαστήµατος
8. for (int i = 0; i < names.length; i++ ) {
9. b[ i ] = new JButton( names[ i ] );
10. c.add( b[ i ] );
11. }

13
2/12/2009

∆ηµιουργία Φόρµας (1/6)

1. Φόρµα µε πεδία για την εισαγωγή των


στοιχείων
2. Εγγραφή των στοιχείων σε αρχείο
3. Μήνυµα επιτυχής εισαγωγής

1.
∆ηµιουργία Φόρµας (2/6)
class Form extends JFrame implements ActionListener{
2. JButton SUBMIT;
3. Container panel;
4. JLabel label1,label2,label3;
5. final JTextField text1,text2, text3;
6. File file = new File("out.txt");
7. Form()
8. {
9. label1 = new JLabel(); label1.setText("Ονοµα :"); text1 = new JTextField(15);

10. label2 = new JLabel(); label2.setText("Επώνυµο :"); text2 = new


JTextField(15);

11. label3 = new JLabel(); label3.setText("Tηλέφωνο :"); text3 = new


JTextField(15);
12. SUBMIT=new JButton(“Εισαγωγή");

13. panel=new JPanel(new GridLayout(4,1));


14. panel.add(label1);
15. panel.add(text1);
16. panel.add(label2);
17. panel.add(text2);
18. panel.add(label3);
19. panel.add(text3);
20. panel.add(SUBMIT);
21. add(panel,BorderLayout.CENTER);
22. SUBMIT.addActionListener(this);
23. setTitle("FORM");
24.
25. setSize( 250,100);
26. show(); }

14
2/12/2009

1.
∆ηµιουργία Φόρµας (3/6)
class Form extends JFrame implements ActionListener{
2. JButton SUBMIT;
3. Container panel;
4. JLabel label1,label2,label3;
5. final JTextField text1,text2, text3;
6. File file = new File("out.txt");
7. Form()
8. {
9. label1 = new JLabel(); label1.setText("Ονοµα :"); text1 = new JTextField(15);

10. label2 = new JLabel(); label2.setText("Επώνυµο :"); text2 = new


JTextField(15);

11. label3 = new JLabel(); label3.setText("Tηλέφωνο :"); text3 = new


JTextField(15);
12. SUBMIT=new JButton(“Εισαγωγή");

13. panel=new JPanel(new GridLayout(4,1));


14. panel.add(label1);
15. panel.add(text1);
16. panel.add(label2);
17. panel.add(text2);
18. panel.add(label3);
19. panel.add(text3);
20. panel.add(SUBMIT);
21. add(panel,BorderLayout.CENTER);
22. SUBMIT.addActionListener(this);
23. setTitle("FORM");
24.
25. setSize( 250,100);
26. show(); }

∆ηµιουργία Φόρµας (4/6)


1.
ActionListener
class Form extends JFrame implements ActionListener{
2. …………………..
3. public void actionPerformed(ActionEvent ae)
4. {
5. String value1=text1.getText();
6. String value2=text2.getText();
7. String value3 = text3.getText();
8. WriteTextFile rrf = new WriteTextFile();
9. try {
10.
11. rrf.setContents(file, value1 + "\t" + value2 +"\t"+value3);
12. NextPage page=new NextPage(value1,value2,value3);
13. page.setVisible(true);
14.
15. } catch (FileNotFoundException ex) {
16. Logger.getLogger(Form.class.getName()).log(Level.SEVERE, null, ex);
17. } catch (IOException ex) {
18. Logger.getLogger(Form.class.getName()).log(Level.SEVERE, null, ex);
19. }
20.
21. }}

15
2/12/2009

∆ηµιουργία Φόρµας (5/6)


1.
2. {
Επόµενη σελίδα
class NextPage extends JFrame

3. Container panel;
4. private JLabel label1, label2, label3, label4;
5. NextPage(String text1,String text2,String text3)
6. {
7. label4 = new JLabel();
8. label4.setText("Καταχώριση στοιχείων ");
9. label1 = new JLabel();
10. label1.setText("Ονοµα :"+text1);
11. label2 = new JLabel();
12. label2.setText("Επώνυµο :"+text2);
13. label3 = new JLabel();
14. label3.setText("Tηλέφωνο :"+text3);
15. panel=new JPanel(new GridLayout(4,1));
16. panel.add(label4);
17. panel.add(label1);
18. panel.add(label2);
19. panel.add(label3);
20. add(panel,BorderLayout.CENTER);
21. setSize( 250, 100);
22. show();}}

∆ηµιουργία Φόρµας (6/6)


Εγγραφή σε Αρχείο
1. public class WriteTextFile {

2. static public void setContents( File aFile, String aContents)


3. throws FileNotFoundException, IOException {
4.
5. BufferedWriter output = new BufferedWriter(new FileWriter(aFile));
6. try {
7. output.write( aContents );
8. }
9. finally {
10. output.close();
11. }}}

16