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);
}
|
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();
}
}
Fordítás J2SDK 1.4 vagy magasabb verziójával.
# > javac TabbedPaneExampleApplet.java
|