JAVATM GUI TUTORIAL

Táblázat

JAVATM GUI Tutorial > Táblázat   |   Applet   Forráskód   Letöltések

Bevezetés

Gyakran előfordul, hogy bizonyos adatokat táblázatosan szeretnénk megjeleníteni. Az alábbi példa azt mutatja be, hogyan lehet egy ilyen táblázatot elhelyezni az alkalmazásunk felületén. Megjegyzem, hogy a táblázatot szinte minden esetben javax.swing.JScrollPane gördülő panelbe érdemes tenni, így minden sor megtekinthető lesz. Az alábbi példában azt is bemutatom, hogyan lehet új sorokat hozzáfűzni táblázathoz. Ez akkor lehet nagyon praktikus, ha egy adatbázis lekérdezett adatait szeretnénk táblázatban megjeleníteni.



Objektumok létrehozása, inicializállása

A táblázatot a Java nyelvben a javax.swing.JTable osztály implementálja. Táblázatot sokféleképpen hozhatunk létre. Az adatot általában egy kétdimenziós tömbben, a táblázat fejlécét viszont egy egydimenziós tömbbe kell belerakni. Fontos, hogy a fejléc mérete megegyezzen a kétdimenziós tömb oszlopainak számával. Ez a megoldás általában akkor használatos, ha a táblázat mérete fix, és csak az cellaadatok változnak. Dinamikusan változó méretű táblázat létrehozásához - mint jelen példában is - a javax.swing.table.DeafultTableModel osztályt érdemes példányosítani. Ez az osztály lehetőséget ad arra, hogy a már meglévő táblázathoz újabb sort vagy oszlopot adjunk hozzá.

    private Vector colNames;     private JTable table;     private DefaultTableModel tableModel;     private JScrollPane scrollPane;         ...     colNames = new Vector();     colNames.add("Name");     colNames.add("Age");     colNames.add("Weight");     tableModel = new DefaultTableModel( colNames, 0 );     table = new JTable( tableModel );     scrollPane = new JScrollPane(table);

Ezzel elkészítettük a táblázatot, a grafikus felület többi részét hasonlóképpen készítjük, mint ahogy már a a többi példában.

Eseménykezelés

A táblázathoz most nem rendelünk eseménykezelést, de lehetőség van rá (lásd a Java dokumentációt). A program eseménykezelése abból áll, hogy amikor lenyomjuk az Add gombot, akkor a lenyíló listában kiválasztott és a beviteli mező aktuális értékeket kimentjük egy külön String tömbbe, és ezt hozzáadjuk a modellhez (nem a táblázathoz). Miután hozzáfűztük a sort a táblázathoz, visszaállítjuk az alapértékekre a beviteli mezőt és a lenyíló listákat.

    public void actionPerformed(ActionEvent e) {     if ( e.getSource().equals(addButton) ) {     age = ageList.getSelectedItem();     weight = weightList.getSelectedItem();     String[] row = {nameField.getText(), age, weight};     tableModel.addRow( row );     nameField.setText( "" );     ageList.select( 20 );     weightList.select( 60 );     repaint();     }     }

Forráskód

/** * @(#)TableExampleApplet.java * * * @author Gabor Nemeth * @version 1.00 2008/9/11 */ import javax.swing.*; import java.awt.*; import java.awt.event.*; import javax.swing.table.*; import java.util.*; import javax.swing.table.*; public class TableExampleApplet extends JApplet implements ActionListener, ItemListener { private Vector colNames; /* column names */ private JScrollPane scrollPane; /* a scrollable panel for the table */ private TextField nameField; /* input field for names */ private Choice ageList; /* input field for names */ private Choice weightList; /* input field for names */ private JButton addButton; /* button for add new record to the table */ private JPanel mainPanel; private JPanel inputPanel; /* panel for input fields and button */ private JTable table; private DefaultTableModel tableModel; String name, age, weight; public void buildGUI() { this.setSize( 400, 250 ); /* filling column names */ colNames = new Vector(); colNames.add("Name"); colNames.add("Age"); colNames.add("Weight"); mainPanel = new JPanel(); mainPanel.setLayout( new GridLayout(2,1)); inputPanel = new JPanel(); inputPanel.setLayout( new GridLayout(4,2) ); tableModel = new DefaultTableModel( colNames, 0 ); table = new JTable( tableModel ); scrollPane = new JScrollPane(table); //scrollPane.add(table); nameField = new TextField( 20 ); ageList = new Choice(); weightList = new Choice(); addButton = new JButton( "Add" ); for ( int i = 0; i < 150; i++ ) { ageList.add( "" + i ); } for ( int i = 1; i < 300; i+=2 ) { weightList.add( "" + i ); } nameField.setText( "" ); ageList.select( 20 ); weightList.select( 60 ); inputPanel.add( new Label("Name:") ); inputPanel.add( nameField ); inputPanel.add( new Label("Age:") ); inputPanel.add( ageList ); inputPanel.add( new Label("Weight:") ); inputPanel.add( weightList ); inputPanel.add( new Label() ); inputPanel.add( addButton ); mainPanel.add(scrollPane); mainPanel.add(inputPanel); ageList.addItemListener(this); weightList.addItemListener(this); addButton.addActionListener(this); this.getContentPane().add(mainPanel); this.setVisible(true); } public void actionPerformed(ActionEvent e) { if ( e.getSource().equals(addButton) ) { age = ageList.getSelectedItem(); weight = weightList.getSelectedItem(); String[] row = {nameField.getText(), age, weight}; tableModel.addRow( row ); nameField.setText( "" ); ageList.select( 20 ); weightList.select( 60 ); repaint(); } } public void itemStateChanged(ItemEvent e) { if ( e.getSource().equals( ageList ) ) { age = ageList.getSelectedItem(); } if ( e.getSource().equals( weightList ) ) { weight = weightList.getSelectedItem(); } } public void init() { buildGUI(); repaint(); } }

Letöltés

Fordítás J2SDK 1.4 vagy magasabb verziójával.
# > javac TableExampleApplet.java
Applet: TableExampleApplet.java
Stand-alone változat: TableExample.java



Vissza a lap tetjére