BOM swing id 91701 Nieznany (2)

background image

przygotował: pawel@kasprowski.pl

Java - interfejs graficzny

Pakiet Swing

background image

przygotował: pawel@kasprowski.pl

Pakiet Swing

background image

przygotował: pawel@kasprowski.pl

Czym jest Swing?

• Rozszerzenie AWT (Abstract Windows

Toolkit) do tworzenia GUI (Graphical User
Interface) w Javie

import java.awt.*;

import java.awt.events.*;

import javax.swing.*;

background image

przygotował: pawel@kasprowski.pl

Hierarchia Swing

• Kontenery ‘Top Level’
• Kontenery (general i special)
• Kontrolki

background image

przygotował: pawel@kasprowski.pl

Kontenery Top-Level

• JApplet

• JDialog

• JFrame

background image

przygotował: pawel@kasprowski.pl

Pozostałe kontenery

• JPanel

• JScrollPane

• JSplitPane

• JTabbedPane

• JToolBar

background image

przygotował: pawel@kasprowski.pl

Proste kontrolki

• JButton
• JComboBox
• JList
• JMenu
• JSlider
• JSpinner
• JTextField

background image

przygotował: pawel@kasprowski.pl

Pierwsza aplikacja okienkowa

import javax.swing.*;

import java.awt.*;

public class FirstWin

{

public static void main(String[] args)

{new FirstWin();}

public FirstWin()

{

JFrame frame = new JFrame("Test");

JPanel contentPane = (JPanel) frame.getContentPane();

contentPane.add(new JLabel(”Hello World"));

frame.setVisible(true);

}

}

FirstWin.java

background image

przygotował: pawel@kasprowski.pl

Pierwsza aplikacja okienkowa

import javax.swing.*;

import java.awt.*;

public class FirstWin

{

public static void main(String[] args)

{new FirstWin();}

public FirstWin()

{

JFrame frame = new JFrame("Test");

JPanel contentPane = (JPanel) frame.getContentPane();

contentPane.add(new JLabel(”Hello World"));

frame.setSize(new Dimension(400, 300));

frame.setLocation(100,100);

frame.setVisible(true);

}

}

background image

przygotował: pawel@kasprowski.pl

Pierwsza aplikacja okienkowa

import javax.swing.*;

import java.awt.*;

public class FirstWin

{

public static void main(String[] args)

{new FirstWin();}

public FirstWin()

{

JFrame frame = new JFrame("Test");

JPanel contentPane = (JPanel) frame.getContentPane();

contentPane.add(new JLabel(”Hello World"));

frame.setSize(new Dimension(400, 300));

frame.setLocation(100,100);

frame.addWindowListener( new WindowAdapter()

{public void windowClosing(WindowEvent e) {System.exit(0);}}

);

frame.setVisible(true);

}

}

FirstWin2.java

background image

przygotował: pawel@kasprowski.pl

Pierwsza aplikacja okienkowa

import javax.swing.*;

import java.awt.*;

public class FirstWin

{

public static void main(String[] args)

{new FirstWin();}

public FirstWin()

{

JFrame frame = new JFrame("Test");

JPanel contentPane = (JPanel) frame.getContentPane();

contentPane.add(new JButton(”Click me"));

frame.setSize(new Dimension(400, 300));

frame.setLocation(100,100);

frame.addWindowListener( new WindowAdapter()

{public void windowClosing(WindowEvent e) {System.exit(0);}});

frame.setVisible(true);

}

}

FirstWin2.java

background image

przygotował: pawel@kasprowski.pl

Zarządzanie położeniem

obiektów (Layout)

• Niezależne od GUI
• Brak współrzędnych obiektów

• BorderLayout
• BoxLayout
• FlowLayout
• GridBagLayout
• GridLayout

background image

przygotował: pawel@kasprowski.pl

Border Layout

• 5 możliwych miejsc położenia: N,S,W,E i

Center

background image

przygotował: pawel@kasprowski.pl

Box Layout

• Pionowo (Vertical) lub poziomo (Horizontal)
• Komponenty jeden pod/obok drugiego

background image

przygotował: pawel@kasprowski.pl

Card Layout

• Komponenty w jednym miejscu

background image

przygotował: pawel@kasprowski.pl

Flow Layout

• Umieszcza komponenty jeden za drugim z

możliwością wstawienia ‘nowego wiersza’

background image

przygotował: pawel@kasprowski.pl

Grid Layout

• Tworzy kratę o podanych wymiarach

background image

przygotował: pawel@kasprowski.pl

GridBagLayout

• Najbardziej skomplikowany – krata ze zmienną liczbą

wierszy i kolumn i różnymi ich wielkościami

background image

przygotował: pawel@kasprowski.pl

Layout Manager [1]

...

JPanel contentPane = (JPanel) frame.getContentPane();

contentPane.setLayout(new BorderLayout());

contentPane.add(new JButton("Click me!"),BorderLayout.NORTH);

contentPane.add(new JButton("No, Me!"),BorderLayout.SOUTH);

...

Layouts1

background image

przygotował: pawel@kasprowski.pl

Layout Manager [2]

...

JPanel contentPane = (JPanel) frame.getContentPane();

contentPane.setLayout(new BorderLayout());

contentPane.add(new JButton("Click me!"),BorderLayout.NORTH);

contentPane.add(new JButton("No, Me!"),BorderLayout.SOUTH);

contentPane.add(new JButton("West!"),BorderLayout.WEST);

contentPane.add(

new JButton(”I’m in the CENTER"),BorderLayout.CENTER);

...

Layouts2

background image

przygotował: pawel@kasprowski.pl

Layout Manager [3]

...

JPanel contentPane = (JPanel) frame.getContentPane();

contentPane.setLayout(new

GridLayout(3,2)

);

contentPane.add(new JButton("Click me!"));

contentPane.add(new JButton("No, Me!"));

contentPane.add(new JButton("West!"));

contentPane.add(new JButton(”I’m in the CENTER"));

...

Layouts3

background image

przygotował: pawel@kasprowski.pl

Layout Manager [4]

...

JPanel contentPane = (JPanel) frame.getContentPane();

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

JPanel inPane = new JPanel();

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

inPane

.add(new JButton("First"));

inPane

.add(new JButton("Second"));

contentPane.add(new JButton("Third"));

contentPane.add(new JButton("Fourth"));

contentPane.add(inPane);

...

Layouts4

background image

przygotował: pawel@kasprowski.pl

Tworzenie formatki

background image

przygotował: pawel@kasprowski.pl

Pierwsza aplikacja okienkowa

import javax.swing.*;

import java.awt.*;

public class FirstWin

{

public static void main(String[] args)

{new FirstWin();}

public FirstWin()

{

JFrame frame = new JFrame("Test");

JPanel contentPane = (JPanel) frame.getContentPane();

contentPane.add(new JButton(”Click me"));

frame.setSize(new Dimension(400, 300));

frame.setLocation(100,100);

frame.addWindowListener( new WindowAdapter()

{public void windowClosing(WindowEvent e) {System.exit(0);}});

frame.setVisible(true);

}

}

FirstWin2.java

background image

przygotował: pawel@kasprowski.pl

Tworzenie formatki

...

contentPane.setLayout(new BorderLayout());

JPanel

upperPanel

= new JPanel();

upperPanel

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

upperPanel

.add(new JButton("jeden"));

upperPanel

.add(new JButton("dwa"));

contentPane.add(

upperPanel

,BorderLayout.NORTH);

contentPane.add(new JTextArea("JTextField"));

...

background image

przygotował: pawel@kasprowski.pl

Obsługa zdarzeń

• Komponenty (event sources) generują

zdarzenia

• Zarejestrowane listener’y obsługują te

zdarzenia

background image

przygotował: pawel@kasprowski.pl

Podstawowe listener’y

Component listener

Obsługuje (nasłuchuje) zmiany wielkości, położenia czy widoczności
komponentu.

Focus listener

Nasłuchuje, czy komponent otrzymał lub utracił focus.

Key listener

Czeka na naciśnięcie klawisza; wywoływane z komponentu
mającego focus.

Mouse events

Czeka na kliknięcia myszą i wejścia kursora myszy nad komponent.

Mouse-motion events

Obsługuje ruchy myszą nad komponentem.

background image

przygotował: pawel@kasprowski.pl

Inne popularne listener’y

Action listener

Obsługuje ‘akcje’ : kliknięcie przycisku, wybranie z menu,
naciśnięcie Enter w TextField.

void actionPerformed(ActionEvent e)

ListSelection listener

Obsługuje zmiany w wyborze aktualnego elementu na listach (JList)

i tablicach (JTable)

void valueChanged(ListSelectionEvent)

WindowEvent listener

Obsługuje zmiany stanu okien (JFrame i JDialog).

void windowOpened(WindowEvent)

void windowClosed(WindowEvent)

void windowIconified(WindowEvent)

void windowDeiconified(WindowEvent)

void windowActivated(WindowEvent)

void windowDeactivated(WindowEvent)

background image

przygotował: pawel@kasprowski.pl

Tworzenie obiektu ActionListener

Deklaracja klasy

public class MyListener implements ActionListener

{

Implementacja metod z interface’u

public void actionPerformed(ActionEvent e)

{
...//obsługa zdarzenia...
}

}

Rejestracja listenera (w programie)

MyListener compList = new MyListener();

aComponent.addActionListener(compList);

background image

przygotował: pawel@kasprowski.pl

Użycie ActionListener [1]

class EventEx{

JButton btn = new JButton("Click me!");

MyListener mlist = new MyListener();

class MyListener implements ActionListener{

public void actionPerformed(ActionEvent e)

{btn.setText("Thank you");}

}

public EventsEx()

{

...

contentPane.add(btn);

btn.addActionListener(mlist);

...

}

}

Inner class

EventEx.class

EventEx$MyListener.class

EventsEx

background image

przygotował: pawel@kasprowski.pl

Użycie ActionListener [2]

class EventEx{

JButton btn = new JButton("Click me!");

class MyListener implements ActionListener{

public void actionPerformed(ActionEvent e)

{btn.setText("Thank you");}

}

public EventsEx()

{

...

contentPane.add(btn);

btn.addActionListener(

new MyListener()

);

...

}

}

background image

przygotował: pawel@kasprowski.pl

Użycie ActionListener [3]

class EventEx{

JButton btn = new JButton("Click me!");

public EventsEx()

{

...

contentPane.add(btn);

btn.addActionListener(

new

ActionListener{

public void actionPerformed(ActionEvent e)

{btn.setText("Thank you");}

);

...

}

}

Anonymous inner class

EventsEx.class

EventsEx$1.class

background image

przygotował: pawel@kasprowski.pl

Użycie ActionListener [4]

class EventEx

implements ActionListener

{

JButton btn = new JButton("Click me!");

public EventsEx()

{

...

contentPane.add(btn);

btn.addActionListener(

this

);

...

}

public void actionPerformed(ActionEvent e)

{btn.setText("Thank you");}

}

background image

przygotował: pawel@kasprowski.pl

Jeden Listener dla wielu obiektów [1]

JButton bt1 = new JButton("First");

JButton bt2 = new JButton("Second");

public EventsEx() implements ActionListener{

...

bt1.setActionCommand(”FIRST”)

bt1.addActionListener(this);

bt2.setActionCommand(”SECOND”)

bt2.addActionListener(this);

contentPane.add(bt1);

contentPane.add(bt2);

...

}

public void actionPerformed(ActionEvent e){

if (e.getActionCommand() == "FIRST")

{bt1.setText(bt1.getText()+„X");}

else

{bt2.setText(bt2.getText()+„X");}

}

}

EventsEx2

background image

przygotował: pawel@kasprowski.pl

Jeden Listener dla wielu obiektów [2]

JButton bt1 = new JButton("First");

JButton bt2 = new JButton("Second");

public EventsEx() implements ActionListener{

...

bt1.setActionCommand(”FIRST”)

bt1.addActionListener(this);

bt2.setActionCommand(”SECOND”)

bt2.addActionListener(this);

contentPane.add(bt1);

contentPane.add(bt2);

...

}

public void actionPerformed(ActionEvent e){

JButton bb;

if (e.getActionCommand() == "FIRST")

{ bb = bt1; }

else

{ bb = bt2; }

bb.setText(bb.getText()+"X");

}

}

EventsEx2

background image

przygotował: pawel@kasprowski.pl

Robudowa przykładu o obsługę

zdarzeń

Edit2

background image

przygotował: pawel@kasprowski.pl

Obsługa zdarzeń

public class Edit2

{

JButton b1,b2;

JTextArea ta;

...

b1 = new JButton("jeden");

b2 = new JButton("dwa");

ta = new JTextArea("tutaj");

upperPanel.add(b1);

upperPanel.add(b2);

contentPane.add(ta);

...

b1.addActionListener(

new ActionListener() {

public void actionPerformed(ActionEvent e) {

ta.setText("jeden");}

}

);

...

Edit2


Wyszukiwarka

Podobne podstrony:
Abolicja podatkowa id 50334 Nieznany (2)
4 LIDER MENEDZER id 37733 Nieznany (2)
katechezy MB id 233498 Nieznany
metro sciaga id 296943 Nieznany
perf id 354744 Nieznany
interbase id 92028 Nieznany
Mbaku id 289860 Nieznany
Probiotyki antybiotyki id 66316 Nieznany
miedziowanie cz 2 id 113259 Nieznany
LTC1729 id 273494 Nieznany
D11B7AOver0400 id 130434 Nieznany
analiza ryzyka bio id 61320 Nieznany
pedagogika ogolna id 353595 Nieznany
Misc3 id 302777 Nieznany
cw med 5 id 122239 Nieznany
D20031152Lj id 130579 Nieznany
mechanika 3 id 290735 Nieznany

więcej podobnych podstron