Java2 1.5: GUI Swing: toepassingen

  1. JOptionPane
  2. JPanel
  3. JButton
  4. JComboBox
  5. JList + sorteren
  6. JSplitPane
  7. JTabbedPane
  8. JToolBar
  9. JCheckbox
  10. JRadioButton
  11. JSlider
  12. JSpinner
  13. JTextArea
  14. JProgressBar
  15. JTable

JOptionPane

Download dit voorbeeld in zip-formaatToon /verberg

JPanel

Opgepast, in deze toepassing werd de AbsoluteLayout van NetBeans gebruikt.

Deze layout is niet standaard aanwezig in Java, je zal eventueel een andere layout moeten gebruiken voor het tweede JPanel.

Download dit voorbeeld in zip-formaatToon /verberg

JButton

Een knop activeren / desactiveren

Je kan met de knoppen links en rechts de middelste knop desactiveren / activeren.
Wanneer je klikt op de middelste knop krijg je een berichtvenster te zien.
De middelste knop heeft een icoontje.

Download dit voorbeeld in zip-formaatToon /verberg

JComboBox

Fotoshow

Deze toepassing gebruikt een JComboBox met een reeks tekstwaarden, bij selectie van een element wordt een figuur getoond (uit de een submap figuren). Deze figuur wordt getoond in een JLabel, hiervoor kunnen we een icon instellen met de methode setIcon.

De code voor het ophalen van de figuren is nieuw.
Meer hierover volgt in de cursus, je kan nu reeds terecht bij Sun.

Download dit voorbeeld in zip-formaatToon /verberg

JList

JList, JScrollPane en lijstmodellen

In deze toepassing zie je twee onafhankelijke lijsten.

De eerste lijst is een standaard JList in een JScrollPane (zodat we kunnen scrollen). De lijst wordt gevuld met de namen van de maanden.

De tweede JList is iets complexer: lstNamen werd gekoppeld aan een DefaultListModel nModel zodanig dat we de items kunnen manipuleren. Vul je in het JTextField txtNieuw een naam in gevolgd door een druk op de enter-toets, dan wordt de naam aan de lijst toegevoegd (indien de naam nog niet in de lijst voorkomt). Druk je op de knop, dan verwijder je het item dat momenteel geselecteerd is.

Download dit voorbeeld in zip-formaatToon /verberg

Toepassing: JList - sorteren

Maak voor deze toepassing gebruik van een JList-component om een aantal gemeenten te tonen. Zorg ervoor dat de elementen uit de lijst gesorteerd worden. Ook bij het toevoegen van nieuwe elementen worden deze elementen gesorteerd in de lijst ingebracht.

Maak gebruik van een DefaultListModel, sorteren van de lijst doe je met behulp van een aantal zelfgeschreven methoden.

Download dit voorbeeld in zip-formaatToon /verberg

Toepassing: JList - sorteren: gebruik van een eigen ListModel met een TreeSet

Het DefaultListModel op zich is ontoereikend om items uit een lijst te sorteren. We hebben dit in de vorige oefening opgelost door een aantal eigen methoden te schrijven in de hoofdklasse van de applicatie. Naar herbruikbaarheid van de code levert dit problemen. Het manipuleren van items in een JList wordt vastgelegd in het gebruikte lijstmodel. We kunnen beter een nieuwe klasse aanmaken met een eigen lijstmodel.

Maak een nieuwe klasse voor een lijstmodel dat automatisch de inhoud van een JList Sorteert. Baseer je klasse op de klasse AbstractListModel. Maak gebruik van een TreeSet-object om de gegevens in de lijst te bewaren. Een TreeSet wordt automatisch gesorteerd !

Maak voor de sortering gebruik van een Comparator die een Collator gebruikt: hierdoor wordt rekening gehouden met de verschillende lokale instellingen, voor het sorteren van waarden.

In de voorgestelde oplossing wordt ook gebruik gemaakt van een aantal interessante methoden:

Download dit voorbeeld in zip-formaatToon /verberg

Toepassing: JList - sorteren van objecten : klassen Student en Klas

In de oefeningen op objectgeoriënteerd programmeren en overerving maakte je reeds een aantal oefening i.v.m. studenten en examens.

Deze keer maak je twee klassen: de klasse Klas en de klasse Student.

Je maakt een GUI-toepassing waarbij de gebruiker twee JList-componenten op het scherm ziet.
In de eerste JList zie je de namen van de klassen, in de tweede JList zie je de namen van de studenten uit de geselcteerde klas.

De klassen worden gesorteerd weergegeven op naam van de klas, de studenten worden gesorteerd op hun naam en daarna op hun voornaam.

Je zal vanzelfsprekend nog andere klassen moeten aanmaken voor deze toepassing.

Weergave in de JList: gezien klassen en studenten deze keer objecten zijn, is het aan te raden een eigen ListCellRenderer te maken die ervoor zorgt dat de juiste gegevens van de objecten in de lijst worden getoond. Standaard wordt bij het toevoegen van een object aan een ListModel de methode toString toegepast op het object. Dit levert niet steeds het gewenste resultaat voor een keurige weergave in de lijst.

Sorteren van de JList: je kan gebruik maken van de klasse SortedListModel die we in de toepassing hierboven hebben gemaakt. Zorg ervoor dat naargelang de klassen of studenten worden gesorteerd een andere Comparator wordt gebruikt.

Download dit voorbeeld in zip-formaatToon /verberg

JSplitPane

Met een JSplitPane kan je het scherm splitsen, de gebruiker kan de afmetingen instellen.

In deze toepassing zie je links een keuzelijst Jlist, met scrollmogelijkheid (JScrollPane). Rechts zie je een figuur, voor de gekozen waarde in de JList, de figuur wordt getoond in een JLabel. Het JLabel werd ook in een JScrollPane geplaatst om de figuur te kunnen scrollen indien nodig.

Download dit voorbeeld in zip-formaatToon /verberg

JTabbedPane

Met een JTabbedPane kunnen componenten mekaar bedekken en op het geschikte moment zichtbaar worden gemaakt.

In de tabbladen werden hier JPanels gestopt met telkens een JLabel.

Wanneer je de editor NetBeans gebruikt kan je de tekst, icoon en tooltip voor de tabbladen instellen bij de properties van de ingevoegde JPanel: Tab title, Tab icon en Tab tooltip.

Download dit voorbeeld in zip-formaatToon /verberg

JToolBar

Met een JToolBar kan je een werkbalk maken. Meestal wordt deze JToolBar voorzien van JButtons. Dikwijls worden de JButtons voorzien van iconen.
Een JToolBar wordt binnen een JPanel in een toepassing geplaatst.

Een JToolBar is standaard dragable: de gebruiker kan de werkbalk verslepen.

Download dit voorbeeld in zip-formaatToon /verberg

JCheckBox

Aankruisvakjes zijn in Swing de component JCheckBox.

In deze toepassing worden in een JList getoond welke opties de gebruiker heeft geselecteerd.

De JList wordt alfabetisch gevuld met behulp van een eigen lijstmodel, de klasse hiervoor werd aangemaakt in een toepassing op de component JList.

Download dit voorbeeld in zip-formaatToon /verberg

JRadioButton

Selectierondjes zijn in Swing te implementeren met de klasse JRadioButton.

De selectierondjes vormen een groep door ze te plaatsen in een ButtonGroup. Dit is nodig om ervoor te zorgen dat de selectierondjes elkaar 'zien': wanneer de ene optie wordt geactiveerd worden de andere keuzes gedesactiveerd.

In de editor NetBeans plaats je een ButtonGroup in je toepassing en stel je de eigenschap Buttongroup voor de JRadioButtons in op de juiste Buttongroup.

Download dit voorbeeld in zip-formaatToon /verberg

JSlider

Een JSlider kan je gebruiken om waarden te visualiseren en in te stellen met behulp van een schuifregelaar

Download dit voorbeeld in zip-formaatToon /verberg

JSpinner

Een JSpinner gebruik je om de gebruiker een keuze te laten maken uit een lijst, slechts één waarde wordt getoond. De waarde kan worden aangpast met twee kleine knopjes, of door de gebruiker ingetikt in een JFormattedTextField.

Download dit voorbeeld in zip-formaatToon /verberg

JTextArea

Een tekstgebied voor meerdere lijnen tekst.

Download dit voorbeeld in zip-formaatToon /verberg

JProgressBar

De volgende toepassing illustreert het gebruik van een voortgangsbalk, hiervoor gebruiken we een JProgressBar.

Een voorgangsbalk gebruik je om visueel aan te geven dat het programma met een lange taak bezig is. Een JProgressBar wordt dus gebruikt wanneer het programma bezig is met een omvangrijk schrijfproces, een grote berekening, ... . In dit voorbeeld simuleren we een taak. We zorgen ervoor dat het programma een tijd bezig is door gebruik te maken van een Timer (klasse: javax.swing.Timer). Met een Timer kan je routines laten uitvoeren binnen welbepaalde tijdsintervallen.

Voor de uit te voeren taak heb ik een extra klasse Taak aangemaakt.

Download dit voorbeeld in zip-formaatToon /verberg

JTable

Met de JTable - component kan je informatie in een tabel weergeven. Wil je scrollmogelijkheden in de tabel, dan plaats je de JTable in een JScrollPane

JTable met NetBeans IDE 3.6 - kennismaking

Wanneer je in een JScrollPane een JTable plaats, dan zal je merken dat NetBeans automatisch het aantal kolommen en rijen voor je instelt. De kolomkoppen worden opgevuld, de celinhoud is leeg.

NetBeans genereert automatisch de code die gebruik maakt van een DefaultTableModel.Hierbij wordt een tweedimensionale Array van Objecten (die allen op null zijn geïnitialiseerd) gebruikt voor de inhoud van de cellen en de String-Array voor de kolomkoppen.

jTable1.setModel(new javax.swing.table.DefaultTableModel(
            new Object [][] {
                {null, null, null, null},
                {null, null, null, null},
                {null, null, null, null},
                {null, null, null, null}
            },
            new String [] {
                "Title 1", "Title 2", "Title 3", "Title 4"
            }
        ));

Deze code hebben we voor deze eerste toepassing niet nodig, hiervoor open je de properties van de JTable en klik je op ... naast de eigenschap model. Klik op de knop 'Reset to default'. De tabel is nu niet meer zichtbaar in de form-editor -daar liggen we niet van wakker - , we stellen een preferredSize in voor het ScrollPane, hiermee zien we de contouren op het formulier.

We zorgen nu voor een tweedimensionale Array van objecten voor de opvulling van de cellen en een String-Array voor de kolomkoppen van de tabel:

Object[][] data = {
    {"Marie", "Kampioen",
     "Snowboarding", new Integer(5), new Boolean(false)},
    {"Eddy", "Spaans",
     "Roeien", new Integer(3), new Boolean(true)},
    {"Kathy", "Naaisters",
     "Naaien", new Integer(2), new Boolean(false)},
    {"Sharon", "Zakhour",
     "Volleybal", new Integer(20), new Boolean(true)},
    {"Philip", "Keus",
     "Pool", new Integer(10), new Boolean(false)}
};
    
String[] kolomkoppen = {"Voornaam",
                        "Naam",
                        "Sport",
                        "# jaren",
                        "Vegetarisch"};

Vraag opnieuw de eigenschappen van de JTable op (gebruik hiervoor de Inspector) en geef bij het onderdeel code in als 'Custom creation code':

new JTable(data,kolomkoppen);

Zorg er natuurlijk voor dat javax.swing.* wordt geïmporteerd.

Wanneer we deze construtor gebruiken voor een JTable kunnen we de tabel onmiddellijk vullen met de waarden die we willen.

Merk op dat de cellen van de JTable standaard editeerbaar zijn en dat de kolombreedtes kunnen worden aangepast.

De volledige toepassing: Download dit voorbeeld in zip-formaatToon /verberg

Kolombreedtes instellen, kolommen tonen en verbergen

In deze toepassing gebruiken we een aantal methoden van de klasse JTable om de breedte van een kolom in te stellen met een JSlider en een kolom uit de tabel te verwijderen en die opnieuw te tonen met behulp van een JCheckBox.

Belangrijk hierbij op te merken is dat de data van een tabel vastgehouden wordt in het model van de tabel, wanneer je een kolom verwijdert uit de tabel, dan wordt die niet meer getoond, maar de data ervan is wel nog te bereiken via het tabelmodel.

Download dit voorbeeld in zip-formaatToon /verberg

Selecties detecteren

Een JTable heeft een SelectionMode waarmee je aangeeft hoe de gebruiker selecties in een tabel kan uitvoeren:

Een JTabel heeft een SelectionModel, dit model kan je opvragen met de methode getSelectionModel. Om selecties van de gebruiker te detecteren voeg je een ListSelectionListener toe aan het selectionModel van de JTable. ListSelectionListener is een interface waarbij de methode valueChanged overridden moet worden.

Download dit voorbeeld in zip-formaatToon /verberg

Deze listener wordt enkel geactiveerd wanneer een andere rij wordt geselecteerd.

Wil je ook veranderingen in kolomselectie opvangen dan kan je een ListSelectionListener toevoegen aan het TableColumnModel van de JTable.

Download dit voorbeeld in zip-formaatToon /verberg

Een TableModel maken

Een JTable gebruikt een standaardmodel voor de inhoud van de tabelcellen. Deze inhoud wordt visueel op het scherm getoond. Je merkt echter dat alle cellen een gelijkaardige opmaak hebben: tekstwaarden die links in de cel staan uitgelijnd. Je kan op een eenvoudige manier een TableModel aanmaken dat rekening houdt met het type van de celinhoud.

Een TableModel erft van de interface TableModel, over het algemeen zal je een TableModel maken dat overerft van de klasse AbstractTableModel: deze klasse implementeert de interface TableModel, waarbij alle methoden leeg zijn gelaten. Je kan nu zelf de methoden die je wenst te implementeren opvullen.

Veelal worden volgende methoden geïmplementeerd:

In volgende toepassing werd een klasse MijnTableModel aangemaakt:

De cellen krijgen een Renderer volgens de klasse waartoe de celinhoud behoort.
De eerste twee kolommen zijn niet editeerbaar.

Download dit voorbeeld in zip-formaatToon /verberg

Overerven van DefaultTableModel

In plaats van over te erven van AbstractTableModel kan je ook zelf een TableModel aanmaken waarbij je overerft van DefaultTableModel, hierdoor heb je het voordeel dat een heel aantal methoden reeds geïmplementeerd zullen zijn.

Download dit voorbeeld in zip-formaatToon /verberg

Meer over JTable bij Sun

Meer tutorials:
leer ook: html | xhtml | css | asp | asp.net | c# | ado.net | linq | ajax | java | javascript
Valid HTML 4.01! Valid CSS! © - Cursusweb