JAVATM GUI TUTORIAL

Füles panelek

JAVATM GUI Tutorial > Füles panelek   |   Applet   Forráskód   Letöltések

Bevezetés

A felhasználói programokban nagyon gyakori, hogyha több fájlon vagy ablakban szeretnénk dolgozni, akkor a program az egyes fájlokat külön füles paneleken nyitja meg és fülekre felírja a fájl nevét esetleg a teljes elérési utat. Ilyen füles paneleket JAVATM-ban is nagyon könnyen létrehozhatunk, ha példányosítjuk a javax.swing.JTabbedPane osztályt. A panelekre bármilyen grafikus kezelőelelmet elhelyezhetünk. Ezért például nagyon jól használható beállító panelek készítésére.
Az alábbi egyszerű példa azt mutatja be, hogyan hozhatunk létre ilyen paneleket.



Füles panel létrehozása

Egyetlen javax.swing.JTabbedPane példány elég, ha füles paneleket akarunk létrehozni, mivel ehhez nagyon egyszerűen adhatunk újabb füleket. A fülek elhelyézésére is lehetőségünk van, ezek szerint a fülek lehetnek jobb vagy bal oldalon, fent vagy lent. A füleket az osztály automatikusan rendezi sorokba attól függően, hogy mennyi fér ki egy sorba. Példánkban a füleket először fent helyezzük el, a bal oldalon szereplő gombokkal azoban ez módosítható.

private JTabbedPane tabbedPane; ... tabbedPane = new JTabbedPane(JTabbedPane.TOP);

Új fül hozzáadása

A példában kezdetben egyetlen fül sincs hozzáadva, csupán a panel szerepel. Új fület akkor adunk hozzá, amikor az Add tab gomb megnyomja a felhasználó. Ekkor a JTabbedPane.addTab() egy új fület adunk a panelhez, melynek felirata "Tab " és egy szám, amelyet akkor növelünk, amikor egy új fület adtunk a panelhez. Ezen kívül egy cimke is kerül a panelre. A panelen több grafikus elem elhelyezhető, a kívánt elrendezésben, azonban így jobban áttekinthető a példa.
A füleken nem csak feliratokat, hanem ikonokat és tooltip-et is elhelyezhetünk. A JAVATM dokumentációjában három alakban is szerepel az addTab() függvény, ezek közül a legegyszerűbb került bemutatásra.

// if addButton pressed, then a new tab will be added to the // tabbed pane with a label if(e.getSource().equals(addButton)) { tabbedPane.addTab("Tab "+this.COUNTER, new JLabel("Label "+this.COUNTER)); this.COUNTER++; }

Fül törlése

A füles panelen a fülek indexelve vannak, ezért ha tudjuk, hogy a törölni kívánt fülnek mi az indexe, akkor egyszerűen törölhetjük a JTabbedPane.removeAt(int) függvénnyel. Paraméterként az indexet kell megadni. Sajnos más paraméterezési lehetőség nincs a törlésre. Ennek az az oka, hogy a fül indexe egyértelműen azonosítja a fület, míg a felirat nem feltétlenül. Arra azonban van mód, hogy a törölni kívánt fülnek (közvetett módon) lekérdezzük az indexét. A példában az aktuálisan kiválasztott füleket lehet törölni a Remove tab gomb segítségével. Ez a következő képpen történik:


// if removeButton pressed, then the selected (current) tab will be // removed from the tabbed pane if(e.getSource().equals(removeButton)) { int index = tabbedPane.getSelectedIndex(); tabbedPane.remove(index); }

Ha például csak a feliratot ismerjük, akkor egyszerűen végigmehetünk a füleken, és megvizsgálhatjuk, hogy a fülön szereplő felirat azonos-e az általunk keresett felirattal.

Fülek elhelyezése, áthelyezése

A fülek elhelyezését a JTabbedPane.setTabPlacement() függvénnyel állíthatjuk be. Paraméterként négy konstans szerepelhet: JTabbedPane.TOP, JTabbedPane.BOTTOM, JTabbedPane.RIGHT, JTabbedPane.LEFT, amelyek értelemszerűen fent, lent, jobb vagy bel oldalon helyezik el a füleket. Ha nem kívánjuk módosítani a fülek elhelyezkedését, akkor célszerű a konstruktorban megadni. A példában gombokkal szabályozhatjuk a fülek elhelyezkedését.

// if rightButton pressed, then the tabs will be aligned to right if(e.getSource().equals(rightButton)) { this.tabbedPane.setTabPlacement(JTabbedPane.RIGHT); } // if rightButton pressed, then the tabs will be aligned to left if(e.getSource().equals(leftButton)) { this.tabbedPane.setTabPlacement(JTabbedPane.LEFT); } // if rightButton pressed, then the tabs will be aligned to top if(e.getSource().equals(topButton)) { this.tabbedPane.setTabPlacement(JTabbedPane.TOP); } // if rightButton pressed, then the tabs will be aligned to bottom if(e.getSource().equals(bottomButton)) { this.tabbedPane.setTabPlacement(JTabbedPane.BOTTOM); }

Forráskód

import java.awt.*; import java.awt.event.*; import javax.swing.*; import javax.swing.event.*; public class TabbedPaneExampleApplet extends JApplet implements ActionListener { private JTabbedPane tabbedPane; private int COUNTER = 0; private Button addButton; // add new tab private Button removeButton; // remove tab private Button leftButton; // align tabs to left private Button rightButton; // align tabs to right private Button topButton; // align tabs to top private Button bottomButton; // align tabs to bottom private JPanel mainPanel; private JPanel topPanel; private JPanel leftPanel; public void buildGui() { // creating objects mainPanel = new JPanel(); topPanel = new JPanel(); leftPanel = new JPanel(); tabbedPane = new JTabbedPane(JTabbedPane.TOP); addButton = new Button( "Add tab" ); removeButton = new Button( "Remove tab" ); leftButton = new Button( "Left" ); rightButton = new Button( "Right" ); topButton = new Button( "Top" ); bottomButton = new Button( "Bottom" ); // setting layout mainPanel.setLayout( new BorderLayout() ); topPanel.setLayout( new FlowLayout() ); leftPanel.setLayout( new BoxLayout(leftPanel, BoxLayout.Y_AXIS) ); this.add( mainPanel ); mainPanel.add( topPanel, BorderLayout.NORTH ); mainPanel.add( leftPanel, BorderLayout.WEST ); mainPanel.add( tabbedPane, BorderLayout.CENTER ); topPanel.add( addButton ); topPanel.add( removeButton ); leftPanel.add( leftButton ); leftPanel.add( rightButton ); leftPanel.add( topButton ); leftPanel.add( bottomButton ); // adding event listeners addButton.addActionListener(this); removeButton.addActionListener(this); topButton.addActionListener(this); leftButton.addActionListener(this); bottomButton.addActionListener(this); rightButton.addActionListener(this); } // event handling public void actionPerformed(ActionEvent e) { // if addButton pressed, then a new tab will be added to the // tabbed pane with a label if(e.getSource().equals(addButton)) { tabbedPane.addTab("Tab "+this.COUNTER, new JLabel("Label "+this.COUNTER)); this.COUNTER++; } // if removeButton pressed, then the selected (current) tab will be // removed from the tabbed pane if(e.getSource().equals(removeButton)) { int index = tabbedPane.getSelectedIndex(); tabbedPane.remove(index); } // if rightButton pressed, then the tabs will be aligned to right if(e.getSource().equals(rightButton)) { this.tabbedPane.setTabPlacement(JTabbedPane.RIGHT); } // if rightButton pressed, then the tabs will be aligned to left if(e.getSource().equals(leftButton)) { this.tabbedPane.setTabPlacement(JTabbedPane.LEFT); } // if rightButton pressed, then the tabs will be aligned to top if(e.getSource().equals(topButton)) { this.tabbedPane.setTabPlacement(JTabbedPane.TOP); } // if rightButton pressed, then the tabs will be aligned to bottom if(e.getSource().equals(bottomButton)) { this.tabbedPane.setTabPlacement(JTabbedPane.BOTTOM); } } public void init() { buildGui(); repaint(); } }

Letöltés

Fordítás J2SDK 1.4 vagy magasabb verziójával.
# > javac TabbedPaneExampleApplet.java
Applet: TabbedPaneExampleApplet.java
Stand-alone változat (gombok helyett menüvel): TabbedPaneExample.java



Vissza a lap tetjére