![]() |
![]() |
![]() |
![]() |
![]() |
|
![]() |
import javax.swing.*;
public class Foption extends javax.swing.JFrame {
public Foption() {
initComponents();
jLabel1.setText("");
}
private void initComponents() {
jButton1 = new javax.swing.JButton();
jButton2 = new javax.swing.JButton();
jButton3 = new javax.swing.JButton();
jButton4 = new javax.swing.JButton();
jButton5 = new javax.swing.JButton();
jLabel1 = new javax.swing.JLabel();
getContentPane().setLayout(new javax.swing.BoxLayout(getContentPane(), javax.swing.BoxLayout.Y_AXIS));
addWindowListener(new java.awt.event.WindowAdapter() {
public void windowClosing(java.awt.event.WindowEvent evt) {
exitForm(evt);
}
});
jButton1.setText("Kies Yes of No");
jButton1.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButton1ActionPerformed(evt);
}
});
getContentPane().add(jButton1);
jButton2.setText("Geef je naam op");
jButton2.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButton2ActionPerformed(evt);
}
});
getContentPane().add(jButton2);
jButton3.setText("Toon Bericht");
jButton3.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButton3ActionPerformed(evt);
}
});
getContentPane().add(jButton3);
jButton4.setText("Maak een keuze");
jButton4.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButton4ActionPerformed(evt);
}
});
getContentPane().add(jButton4);
jButton5.setText("Toon interne dialoog");
jButton5.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButton5ActionPerformed(evt);
}
});
getContentPane().add(jButton5);
jLabel1.setText("test");
jLabel1.setPreferredSize(new java.awt.Dimension(200, 30));
getContentPane().add(jLabel1);
pack();
}
private void jButton5ActionPerformed(java.awt.event.ActionEvent evt) {
int res = JOptionPane.showInternalConfirmDialog(
getContentPane(),
"Kies yes of no",
"Ja of nee?",
JOptionPane.YES_NO_OPTION);
if(res==JOptionPane.YES_OPTION) jLabel1.setText("Je hebt YES geklikt !");
else jLabel1.setText("Je hebt NO geklikt");
}
private void jButton4ActionPerformed(java.awt.event.ActionEvent evt) {
String dieren[] = {"aap","ezel","hond","kat" };
String dier = (String)JOptionPane.showInputDialog(
getRootPane(),
"Kies een dier",
"Dierkeuze",
JOptionPane.QUESTION_MESSAGE,
null,
dieren,
dieren[1]);
if(dier==null) jLabel1.setText("Je hebt CANCEL geklikt");
else jLabel1.setText("Gekozen dier: " +dier);
}
private void jButton3ActionPerformed(java.awt.event.ActionEvent evt) {
JOptionPane.showMessageDialog(
getContentPane(),
"Hallo",
"Titel",
JOptionPane.WARNING_MESSAGE);
}
private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {
String naam = JOptionPane.showInputDialog(getContentPane(),"Geef je naam op");
if(naam==null) jLabel1.setText("Je hebt CANCEL geklikt");
else jLabel1.setText("Je naam is: " +naam);
}
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
int res = JOptionPane.showConfirmDialog(
getContentPane(),
"Kies yes of no",
"Ja of nee?",
JOptionPane.YES_NO_OPTION);
if(res==JOptionPane.YES_OPTION) jLabel1.setText("Je hebt YES geklikt !");
else jLabel1.setText("Je hebt NO geklikt");
}
/** Exit the Application */
private void exitForm(java.awt.event.WindowEvent evt) {
System.exit(0);
}
public static void main(String args[]) {
new Foption().show();
}
// Variables declaration - do not modify
private javax.swing.JButton jButton1;
private javax.swing.JButton jButton2;
private javax.swing.JButton jButton3;
private javax.swing.JButton jButton4;
private javax.swing.JButton jButton5;
private javax.swing.JLabel jLabel1;
// End of variables declaration
}
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.
public class FPanel extends javax.swing.JFrame {
public FPanel() {
initComponents();
}
private void initComponents() {
jPanel1 = new javax.swing.JPanel();
jButton1 = new javax.swing.JButton();
jLabel1 = new javax.swing.JLabel();
jPanel2 = new javax.swing.JPanel();
jButton2 = new javax.swing.JButton();
jLabel2 = new javax.swing.JLabel();
jPanel3 = new javax.swing.JPanel();
jButton3 = new javax.swing.JButton();
jLabel3 = new javax.swing.JLabel();
getContentPane().setLayout(new java.awt.FlowLayout());
addWindowListener(new java.awt.event.WindowAdapter() {
public void windowClosing(java.awt.event.WindowEvent evt) {
exitForm(evt);
}
});
jPanel1.setLayout(new javax.swing.BoxLayout(jPanel1, javax.swing.BoxLayout.Y_AXIS));
jPanel1.setBackground(new java.awt.Color(255, 255, 204));
jPanel1.setBorder(new javax.swing.border.CompoundBorder(new javax.swing.border.TitledBorder("Paneel1"), new javax.swing.border.EmptyBorder(new java.awt.Insets(10, 10, 10, 10))));
jPanel1.setPreferredSize(new java.awt.Dimension(100, 100));
jButton1.setText("Klik");
jButton1.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButton1ActionPerformed(evt);
}
});
jPanel1.add(jButton1);
jLabel1.setText("Testlabel1");
jPanel1.add(jLabel1);
getContentPane().add(jPanel1);
jPanel2.setLayout(new org.netbeans.lib.awtextra.AbsoluteLayout());
jPanel2.setBackground(new java.awt.Color(153, 153, 255));
jPanel2.setBorder(new javax.swing.border.SoftBevelBorder(javax.swing.border.BevelBorder.RAISED));
jPanel2.setPreferredSize(new java.awt.Dimension(100, 100));
jButton2.setText("Klik");
jButton2.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButton2ActionPerformed(evt);
}
});
jPanel2.add(jButton2, new org.netbeans.lib.awtextra.AbsoluteConstraints(20, 20, 60, -1));
jLabel2.setText("Testlabel2");
jPanel2.add(jLabel2, new org.netbeans.lib.awtextra.AbsoluteConstraints(20, 70, 60, -1));
getContentPane().add(jPanel2);
jPanel3.setLayout(new javax.swing.BoxLayout(jPanel3, javax.swing.BoxLayout.Y_AXIS));
jPanel3.setBackground(new java.awt.Color(204, 255, 204));
jPanel3.setBorder(new javax.swing.border.EmptyBorder(new java.awt.Insets(10, 10, 10, 10)));
jPanel3.setForeground(new java.awt.Color(212, 208, 200));
jPanel3.setPreferredSize(new java.awt.Dimension(100, 100));
jButton3.setText("Klik");
jButton3.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButton3ActionPerformed(evt);
}
});
jPanel3.add(jButton3);
jLabel3.setText("Testlabel3");
jPanel3.add(jLabel3);
getContentPane().add(jPanel3);
pack();
}
private void jButton3ActionPerformed(java.awt.event.ActionEvent evt) {
jLabel3.setText("Geklikt");
}
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
jLabel1.setText("Geklikt");
}
private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {
jLabel2.setText("Geklikt");
}
private void exitForm(java.awt.event.WindowEvent evt) {
System.exit(0);
}
public static void main(String args[]) {
new FPanel().show();
}
// Variables declaration - do not modify
private javax.swing.JButton jButton1;
private javax.swing.JButton jButton2;
private javax.swing.JButton jButton3;
private javax.swing.JLabel jLabel1;
private javax.swing.JLabel jLabel2;
private javax.swing.JLabel jLabel3;
private javax.swing.JPanel jPanel1;
private javax.swing.JPanel jPanel2;
private javax.swing.JPanel jPanel3;
// End of variables declaration
}
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.
import javax.swing.*;
public class FButtons extends javax.swing.JFrame {
public FButtons() {
initComponents();
}
private void initComponents() {
jPanel1 = new javax.swing.JPanel();
cmdLinks = new javax.swing.JButton();
cmdMidden = new javax.swing.JButton();
cmdRechts = new javax.swing.JButton();
addWindowListener(new java.awt.event.WindowAdapter() {
public void windowClosing(java.awt.event.WindowEvent evt) {
exitForm(evt);
}
});
cmdLinks.setText("Disable knop -->");
cmdLinks.setEnabled(false);
cmdLinks.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
cmdLinksActionPerformed(evt);
}
});
jPanel1.add(cmdLinks);
cmdMidden.setIcon(new javax.swing.ImageIcon(getClass().getResource("bereken.gif")));
cmdMidden.setText("Middelsteknop");
cmdMidden.setEnabled(false);
cmdMidden.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
cmdMiddenActionPerformed(evt);
}
});
jPanel1.add(cmdMidden);
cmdRechts.setText("<-- enable knop");
cmdRechts.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
cmdRechtsActionPerformed(evt);
}
});
jPanel1.add(cmdRechts);
getContentPane().add(jPanel1, java.awt.BorderLayout.CENTER);
pack();
}
private void cmdMiddenActionPerformed(java.awt.event.ActionEvent evt) {
JOptionPane.showMessageDialog(
getContentPane(),
"Je hebt op de middelste ,knop geklikt !",
"Klikactie gedetecteerd",
JOptionPane.WARNING_MESSAGE);
}
private void cmdRechtsActionPerformed(java.awt.event.ActionEvent evt) {
cmdMidden.setEnabled(true);
cmdRechts.setEnabled(false);
cmdLinks.setEnabled(true);
}
private void cmdLinksActionPerformed(java.awt.event.ActionEvent evt) {
cmdMidden.setEnabled(false);
cmdLinks.setEnabled(false);
cmdRechts.setEnabled(true);
}
private void exitForm(java.awt.event.WindowEvent evt) {
System.exit(0);
}
public static void main(String args[]) {
new FButtons().show();
}
// Variables declaration - do not modify
private javax.swing.JButton cmdLinks;
private javax.swing.JButton cmdMidden;
private javax.swing.JButton cmdRechts;
private javax.swing.JPanel jPanel1;
// End of variables declaration
}
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.
import javax.swing.*;
import java.net.*;
public class Ffotoshow extends javax.swing.JFrame {
private String[] figuurnamen = { "aap", "ezel", "geit","varken"};
ImageIcon[] figuren = new ImageIcon[figuurnamen.length];
public Ffotoshow() {
initComponents();
laadFiguren();
cmbFig.setSelectedIndex(0);
}
public void laadFiguren(){
for (int i = 0; i < figuren.length ; i++) {
String figuurnaam = "figuren/" +figuurnamen[i] + ".jpg";
URL iconURL = Ffotoshow.class.getResource(figuurnaam);
ImageIcon icon = new ImageIcon(iconURL);
figuren[i] = icon;
}
}
private void initComponents() {
jPanel1 = new javax.swing.JPanel();
cmbFig = new JComboBox(figuurnamen);
jPanel2 = new javax.swing.JPanel();
jLabel1 = new javax.swing.JLabel();
addWindowListener(new java.awt.event.WindowAdapter() {
public void windowClosing(java.awt.event.WindowEvent evt) {
exitForm(evt);
}
});
jPanel1.setLayout(new java.awt.BorderLayout());
jPanel1.setBorder(new javax.swing.border.CompoundBorder(new javax.swing.border.EmptyBorder(new java.awt.Insets(5, 5, 5, 5)), new javax.swing.border.TitledBorder("Maak je keuze")));
cmbFig.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
cmbFigActionPerformed(evt);
}
});
jPanel1.add(cmbFig, java.awt.BorderLayout.CENTER);
getContentPane().add(jPanel1, java.awt.BorderLayout.CENTER);
jPanel2.setBorder(new javax.swing.border.CompoundBorder(new javax.swing.border.EmptyBorder(new java.awt.Insets(5, 5, 5, 5)), new javax.swing.border.TitledBorder("Figuur")));
jLabel1.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
jLabel1.setPreferredSize(new java.awt.Dimension(200, 200));
jPanel2.add(jLabel1);
getContentPane().add(jPanel2, java.awt.BorderLayout.SOUTH);
pack();
}
private void cmbFigActionPerformed(java.awt.event.ActionEvent evt) {
jLabel1.setIcon(figuren[cmbFig.getSelectedIndex()]);
}
private void exitForm(java.awt.event.WindowEvent evt) {
System.exit(0);
}
public static void main(String args[]) {
new Ffotoshow().show();
}
// Variables declaration - do not modify
private javax.swing.JComboBox cmbFig;
private javax.swing.JLabel jLabel1;
private javax.swing.JPanel jPanel1;
private javax.swing.JPanel jPanel2;
// End of variables declaration
}
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.
import java.awt.*;
import java.util.*;
import javax.swing.*;
public class Flist extends javax.swing.JFrame {
public String[] maanden = {"januari","februari","maart","april","mei",
"juni","juli","augustus","september","oktober","november","december"};
public Flist() {
initComponents();
maaklstDagen();
}
public void maaklstDagen(){
nModel.addElement("William");
nModel.addElement("Jan");
nModel.addElement("Peter");
nModel.addElement("Kristien");
nModel.addElement("Karina");
nModel.addElement("Johan");
nModel.addElement("Ilse");
nModel.addElement("Isabelle");
nModel.addElement("Werner");
lstNamen.setSelectedIndex(0);
}
public boolean naamReedsAanwezig(String naam){
boolean inlijst = false;
for(int i = 0; i < nModel.getSize();i++){
if(nModel.getElementAt(i).equals(naam)){
inlijst= true;
}
}
return inlijst;
}
private void initComponents() {
p1 = new javax.swing.JPanel();
jScrollPane1 = new javax.swing.JScrollPane();
lstMaanden = new JList(maanden);
p2 = new javax.swing.JPanel();
jScrollPane2 = new javax.swing.JScrollPane();
lstNamen = new JList(nModel);
jPanel1 = new javax.swing.JPanel();
txtNieuw = new javax.swing.JTextField();
cmdVerwijder = new javax.swing.JButton();
getContentPane().setLayout(new javax.swing.BoxLayout(getContentPane(), javax.swing.BoxLayout.X_AXIS));
addWindowListener(new java.awt.event.WindowAdapter() {
public void windowClosing(java.awt.event.WindowEvent evt) {
exitForm(evt);
}
});
p1.setLayout(new java.awt.FlowLayout(java.awt.FlowLayout.LEFT));
p1.setBorder(new javax.swing.border.CompoundBorder(new javax.swing.border.TitledBorder("Maanden"), new javax.swing.border.EmptyBorder(new java.awt.Insets(10, 10, 10, 10))));
jScrollPane1.setViewportView(lstMaanden);
p1.add(jScrollPane1);
getContentPane().add(p1);
p2.setLayout(new javax.swing.BoxLayout(p2, javax.swing.BoxLayout.Y_AXIS));
p2.setBorder(new javax.swing.border.CompoundBorder(new javax.swing.border.TitledBorder("Namen"), new javax.swing.border.EmptyBorder(new java.awt.Insets(10, 10, 10, 10))));
lstNamen.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION);
jScrollPane2.setViewportView(lstNamen);
p2.add(jScrollPane2);
jPanel1.setLayout(new javax.swing.BoxLayout(jPanel1, javax.swing.BoxLayout.X_AXIS));
jPanel1.setBorder(new javax.swing.border.EmptyBorder(new java.awt.Insets(1, 1, 1, 1)));
txtNieuw.setPreferredSize(new java.awt.Dimension(100, 21));
txtNieuw.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
txtNieuwActionPerformed(evt);
}
});
jPanel1.add(txtNieuw);
cmdVerwijder.setText("Verwijder");
cmdVerwijder.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
cmdVerwijderActionPerformed(evt);
}
});
jPanel1.add(cmdVerwijder);
p2.add(jPanel1);
getContentPane().add(p2);
pack();
}
private void txtNieuwActionPerformed(java.awt.event.ActionEvent evt) {
String naam = txtNieuw.getText();
if(naam.equals("") || naamReedsAanwezig(naam)){
Toolkit.getDefaultToolkit().beep();
txtNieuw.requestFocusInWindow();
txtNieuw.selectAll();
return;
}
nModel.addElement(txtNieuw.getText());
txtNieuw.requestFocusInWindow();
txtNieuw.setText("");
lstNamen.setSelectedIndex(nModel.getSize()-1);
lstNamen.ensureIndexIsVisible(nModel.getSize()-1);
}
private void cmdVerwijderActionPerformed(java.awt.event.ActionEvent evt) {
int index = lstNamen.getSelectedIndex();
nModel.remove(index);
int grootte = nModel.getSize();
if(grootte == 0) {
cmdVerwijder.setEnabled(false);
} else {
if (index == grootte) {
index--;
}
}
lstNamen.setSelectedIndex(index);
lstNamen.ensureIndexIsVisible(index);
}
private void exitForm(java.awt.event.WindowEvent evt) {
System.exit(0);
}
public static void main(String args[]) {
new Flist().show();
}
// Variables declaration - do not modify
private javax.swing.JButton cmdVerwijder;
private javax.swing.JPanel jPanel1;
private javax.swing.JScrollPane jScrollPane1;
private javax.swing.JScrollPane jScrollPane2;
private javax.swing.JList lstMaanden;
private javax.swing.JList lstNamen;
private javax.swing.JPanel p1;
private javax.swing.JPanel p2;
private javax.swing.JTextField txtNieuw;
// End of variables declaration
DefaultListModel nModel = new DefaultListModel();
}
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.
import java.awt.*;
import java.util.*;
import javax.swing.*;
public class Flist extends javax.swing.JFrame {
public Flist() {
initComponents();
vulGemeenten();
}
public void vulGemeenten(){
nieuwlstItem("Gent");
nieuwlstItem("Aalbeke");
nieuwlstItem("Kortrijk");
nieuwlstItem("Izegem");
}
public int bepaalPositie(String gemeente){
int pos = 0;
for( int i = 0; i < gModel.getSize();i++){
String hgemeente = (String)gModel.getElementAt(i);
if (hgemeente.compareTo(gemeente)>0) {
break;
} else {
pos++;
}
}
return pos;
}
public boolean naamReedsAanwezig(String naam){
boolean inlijst = false;
for(int i = 0; i < gModel.getSize();i++){
if(gModel.getElementAt(i).equals(naam)){
inlijst= true;
}
}
return inlijst;
}
public int nieuwlstItem(String item){
String ngemeente = item;
int pos = bepaalPositie(ngemeente);
gModel.add(pos,ngemeente);
return pos;
}
private void initComponents() {
p2 = new javax.swing.JPanel();
jScrollPane2 = new javax.swing.JScrollPane();
lstGemeenten = new JList(gModel);
jPanel1 = new javax.swing.JPanel();
txtNieuw = new javax.swing.JTextField();
cmdVerwijder = new javax.swing.JButton();
getContentPane().setLayout(new javax.swing.BoxLayout(getContentPane(), javax.swing.BoxLayout.X_AXIS));
addWindowListener(new java.awt.event.WindowAdapter() {
public void windowClosing(java.awt.event.WindowEvent evt) {
exitForm(evt);
}
});
p2.setLayout(new javax.swing.BoxLayout(p2, javax.swing.BoxLayout.Y_AXIS));
p2.setBorder(new javax.swing.border.CompoundBorder(new javax.swing.border.TitledBorder("Namen"), new javax.swing.border.EmptyBorder(new java.awt.Insets(10, 10, 10, 10))));
lstGemeenten.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION);
jScrollPane2.setViewportView(lstGemeenten);
p2.add(jScrollPane2);
jPanel1.setLayout(new javax.swing.BoxLayout(jPanel1, javax.swing.BoxLayout.X_AXIS));
jPanel1.setBorder(new javax.swing.border.EmptyBorder(new java.awt.Insets(1, 1, 1, 1)));
txtNieuw.setPreferredSize(new java.awt.Dimension(100, 21));
txtNieuw.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
txtNieuwActionPerformed(evt);
}
});
jPanel1.add(txtNieuw);
cmdVerwijder.setText("Verwijder");
cmdVerwijder.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
cmdVerwijderActionPerformed(evt);
}
});
jPanel1.add(cmdVerwijder);
p2.add(jPanel1);
getContentPane().add(p2);
pack();
}
private void txtNieuwActionPerformed(java.awt.event.ActionEvent evt) {
String naam = txtNieuw.getText();
if(naam.equals("") || naamReedsAanwezig(naam)){
Toolkit.getDefaultToolkit().beep();
txtNieuw.requestFocusInWindow();
txtNieuw.selectAll();
return;
}
int pos = nieuwlstItem(naam);
lstGemeenten.setSelectedIndex(pos);
lstGemeenten.ensureIndexIsVisible(pos);
txtNieuw.requestFocusInWindow();
txtNieuw.setText("");
}
private void cmdVerwijderActionPerformed(java.awt.event.ActionEvent evt) {
int index = lstGemeenten.getSelectedIndex();
gModel.remove(index);
int grootte = gModel.getSize();
if(grootte == 0) {
cmdVerwijder.setEnabled(false);
} else {
if (index == grootte) {
index--;
}
}
lstGemeenten.setSelectedIndex(index);
lstGemeenten.ensureIndexIsVisible(index);
}
private void exitForm(java.awt.event.WindowEvent evt) {
System.exit(0);
}
public static void main(String args[]) {
new Flist().show();
}
// Variables declaration - do not modify
private javax.swing.JButton cmdVerwijder;
private javax.swing.JPanel jPanel1;
private javax.swing.JScrollPane jScrollPane2;
private javax.swing.JList lstGemeenten;
private javax.swing.JPanel p2;
private javax.swing.JTextField txtNieuw;
// End of variables declaration
DefaultListModel gModel = new DefaultListModel();
}
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:
import javax.swing.*;
import java.text.Collator;
import java.util.*;
//We erven over van de klasse AbstractListModel:
//Een 'lege' klasse voor het maken van een lijstmodel
public class SortedListModel extends AbstractListModel
{
//Algemene variabelen
//model is van het type Treeset: wordt automatisch gesorteerd
TreeSet model;
//Een comparator voor het sorteren,
//wordt gebruikt omdat een standaardcomparator geen Collator gebruikt:
//een Collator houdt rekening met lokale taalinstellingen
//voor het maken van de Comparator maken we gebruik van een anonieme binnenklasse
//met supertype de interface Comparator
private static Comparator MIJN_COMPARATOR
= new Comparator()
{
public int compare( Object o1, Object o2 )
{
String str1 = o1.toString();
String str2 = o2.toString();
Collator collator = Collator.getInstance();
int result = collator.compare( str1, str2 );
return result;
}
};
//Constructor voor de klasse
//We geven de comparator mee, zodat de treeset deze comparator gebruikt
public SortedListModel()
{
model = new TreeSet( MIJN_COMPARATOR );
}
// methoden voor het listmodel
//de methode getSize van het model retourneert de size van de Treeset
//Aantal elementen in de lijst
public int getSize()
{
return model.size();
}
//Element op een aangegeven positie
//toArray() uit de interface Collection toegepast op een Treeset:
//omvormen van een lijst-object naar een Array
public Object getElementAt( int index )
{
return model.toArray()[index];
}
//Element toevoegen
//Een subklasse van AbstractListModel moet de methode fireContentsChanged aanroepen
//wanneer een element wordt gewijzigd of toegevoegd. Als argument wordt de bron (this)
//En het bereik waar werd gewijzigd (begin,einde) meegegeven
public void addElement( Object element )
{
if( model.add( element ))
{
fireContentsChanged( this, 0, getSize() );
}
}
//unieke en niet lege elementen toevoegen
public void addUElement( Object element)
{
if (!(model.contains(element) || element.equals(""))){
if( model.add( element ))
{
fireContentsChanged( this, 0, getSize() );
}
}
}
//Een array van elementen toevoegen
public void addAll( Object elements[] )
{
Collection c = Arrays.asList(elements);
model.addAll(c);
fireContentsChanged( this, 0, getSize() );
}
//lijst leegmaken
public void clear()
{
model.clear();
fireContentsChanged( this, 0, getSize() );
}
//contains retourneert true als het item in de set aanwezig is
public boolean contains( Object element )
{
return model.contains( element );
}
//retourneer het eerste element
public Object firstElement()
{
return model.first();
}
//een iterator voor de lijst
public Iterator iterator()
{
return model.iterator();
}
//laatste element uit de lijst
public Object lastElement()
{
// Return the appropriate element
return model.last();
}
//verwijder een element
public boolean removeElement( Object element )
{
boolean removed = model.remove( element );
if( removed )
{
fireContentsChanged( this, 0, getSize() );
}
return removed;
}
//retourneert de positie van een element
public int getPosition(Object element){
Iterator it = this.iterator();
int pos = 0;
while(it.hasNext()){
if(it.next().equals(element)){
break;
}
pos++;
}
return pos;
}
}
import java.awt.*;
import java.util.*;
import javax.swing.*;
public class Flist extends javax.swing.JFrame {
//initiele inhoud van de lijst
private String[] gemeenten = { "Gent","Aalbeke","Kortrijk","Izegem"};
public Flist() {
initComponents();
vulGemeenten();
}
public void vulGemeenten(){
gmodel.addAll(gemeenten);
}
private void initComponents() {
p2 = new javax.swing.JPanel();
jScrollPane2 = new javax.swing.JScrollPane();
lstGemeenten = new JList(gmodel);
jPanel1 = new javax.swing.JPanel();
txtNieuw = new javax.swing.JTextField();
cmdVerwijder = new javax.swing.JButton();
getContentPane().setLayout(new javax.swing.BoxLayout(getContentPane(), javax.swing.BoxLayout.X_AXIS));
addWindowListener(new java.awt.event.WindowAdapter() {
public void windowClosing(java.awt.event.WindowEvent evt) {
exitForm(evt);
}
});
p2.setLayout(new javax.swing.BoxLayout(p2, javax.swing.BoxLayout.Y_AXIS));
p2.setBorder(new javax.swing.border.CompoundBorder(new javax.swing.border.TitledBorder("Namen"), new javax.swing.border.EmptyBorder(new java.awt.Insets(10, 10, 10, 10))));
jScrollPane2.setViewportView(lstGemeenten);
p2.add(jScrollPane2);
jPanel1.setLayout(new javax.swing.BoxLayout(jPanel1, javax.swing.BoxLayout.X_AXIS));
jPanel1.setBorder(new javax.swing.border.EmptyBorder(new java.awt.Insets(1, 1, 1, 1)));
txtNieuw.setPreferredSize(new java.awt.Dimension(100, 21));
txtNieuw.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
txtNieuwActionPerformed(evt);
}
});
jPanel1.add(txtNieuw);
cmdVerwijder.setText("Verwijder");
cmdVerwijder.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
cmdVerwijderActionPerformed(evt);
}
});
jPanel1.add(cmdVerwijder);
p2.add(jPanel1);
getContentPane().add(p2);
pack();
}
private void txtNieuwActionPerformed(java.awt.event.ActionEvent evt) {
String naam = txtNieuw.getText();
int pos;
//element moet uniek en niet leeg zijn
gmodel.addUElement(naam);
//controls juistzetten
pos = gmodel.getPosition(naam);
lstGemeenten.setSelectedIndex(pos);
lstGemeenten.ensureIndexIsVisible(pos);
txtNieuw.requestFocusInWindow();
txtNieuw.setText("");
}
private void cmdVerwijderActionPerformed(java.awt.event.ActionEvent evt) {
int index = lstGemeenten.getSelectedIndex();
gmodel.removeElement(gmodel.getElementAt(index));
int grootte = gmodel.getSize();
if(grootte == 0) {
cmdVerwijder.setEnabled(false);
} else {
if (index == grootte) {
index--;
}
}
lstGemeenten.setSelectedIndex(index);
lstGemeenten.ensureIndexIsVisible(index);
}
private void exitForm(java.awt.event.WindowEvent evt) {
System.exit(0);
}
public static void main(String args[]) {
new Flist().show();
}
// Variables declaration - do not modify
private javax.swing.JButton cmdVerwijder;
private javax.swing.JPanel jPanel1;
private javax.swing.JScrollPane jScrollPane2;
private javax.swing.JList lstGemeenten;
private javax.swing.JPanel p2;
private javax.swing.JTextField txtNieuw;
// End of variables declaration
SortedListModel gmodel = new SortedListModel();
}
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.
import java.util.*;
public class Klas {
protected String naam;
ArrayList studenten = new ArrayList();
public static ArrayList klassen = new ArrayList();
public Klas(String n) {
naam = n;
klassen.add(this);
}
public void nieuweStudent(String n,String v, int l){
Student nstudent = new Student(n,v,l);
studenten.add(nstudent);
}
}
public class Student {
public String naam;
public String voornaam;
public int leeftijd;
public Student(){
}
public Student(String naam, String voornaam, int leeftijd) {
this.naam = naam;
this.voornaam = voornaam;
this.leeftijd = leeftijd;
}
}
import java.awt.*;
import javax.swing.*;
class stCellRenderer extends JLabel implements ListCellRenderer {
public stCellRenderer() {
setOpaque(true);
}
public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus)
{
Student st = (Student)value;
setText(st.naam +" " +st.voornaam);
setBackground(isSelected ? Color.blue : Color.white);
setForeground(isSelected ? Color.white : Color.black);
return this;
}
}
import java.awt.*;
import javax.swing.*;
class kCellRenderer extends JLabel implements ListCellRenderer {
public kCellRenderer() {
setOpaque(true);
}
public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus)
{
setText(((Klas)value).naam);
setBackground(isSelected ? Color.green : Color.white);
setForeground(isSelected ? Color.white : Color.black);
return this;
}
}
import javax.swing.*;
import java.util.*;
//We erven over van de klasse AbstractListModel:
//Een klasse 'lege' klasse voor het maken van een lijstmodel
public class SortedListModel extends AbstractListModel
{
//Algemene variabelen
//model is van het type Treeset: wordt automatisch gesorteerd
TreeSet model;
//Comparators voor het sorteren van de Treeset
public static Comparator klasComparator = new Comparator() {
public int compare(Object klas, Object andereklas) {
String klas1 = ((Klas) klas).naam;
String klas2 = ((Klas) andereklas).naam;
if (!(klas1.equals(klas2)))
return klas1.compareTo(klas2);
else
return klas1.compareTo(klas2);
}
};
public static Comparator studentComparator = new Comparator() {
public int compare(Object student, Object anderestudent) {
String naam1 = ((Student) student).naam;
String voornaam1 = ((Student) student).voornaam;
String naam2 = ((Student) anderestudent).naam;
String voornaam2 = ((Student) anderestudent).voornaam;
if (!(naam1.equals(naam2)))
return naam1.compareTo(naam2);
else
return voornaam1.compareTo(voornaam2);
}
};
//Constructor voor de klasse
//We geven de comparator mee, zodat de treeset deze comparator gebruikt
//het meegegven type gebruiken we om de juiste Comparator in te stellen
public SortedListModel(String type)
{
if(type.equals("Student")) model = new TreeSet( studentComparator );
if(type.equals("Klas")) model = new TreeSet( klasComparator );
}
// methoden voor het listmodel
//de methode getSize van het model retourneert de size van de Treeset
//Aantal elementen in de lijst
public int getSize()
{
return model.size();
}
//Element op een aangegeven positie
//toArray() uit de interface Collection toegepast op een Treeset:
//omvormen van een lijst-object naar een Array
public Object getElementAt( int index )
{
return model.toArray()[index];
}
//Element toevoegen
//Een subklasse van AbstractListModel moet de methode fireContentsChanged aanroepen
//wanneer een element wordt gewijzigd of toegevoegd. Als argument wordt de bron (this)
//En het bereik waar werd gewijzigd (begin,einde) meegegeven
public void addElement( Object element )
{
if( model.add( element ))
{
fireContentsChanged( this, 0, getSize() );
}
}
//unieke en niet lege elementen toevoegen
public void addUElement( Object element)
{
if (!(model.contains(element) || element.equals(""))){
if( model.add( element ))
{
fireContentsChanged( this, 0, getSize() );
}
}
}
//Een array van elementen toevoegen
public void addAll( Object elements[] )
{
Collection c = Arrays.asList(elements);
model.addAll(c);
fireContentsChanged( this, 0, getSize() );
}
//lijst leegmaken
public void clear()
{
model.clear();
fireContentsChanged( this, 0, getSize() );
}
//contains retourneert true als het item in de set aanwezig is
public boolean contains( Object element )
{
return model.contains( element );
}
//retourneer het eerste element
public Object firstElement()
{
return model.first();
}
//een iterator voor de lijst
public Iterator iterator()
{
return model.iterator();
}
//laatste element uit de lijst
public Object lastElement()
{
// Return the appropriate element
return model.last();
}
//verwijder een element
public boolean removeElement( Object element )
{
boolean removed = model.remove( element );
if( removed )
{
fireContentsChanged( this, 0, getSize() );
}
return removed;
}
//retourneert de positie van een element
public int getPosition(Object element){
Iterator it = this.iterator();
int pos = 0;
while(it.hasNext()){
if(it.next().equals(element)){
break;
}
pos++;
}
return pos;
}
}
import java.awt.*;
import java.util.*;
import javax.swing.*;
public class Flist extends javax.swing.JFrame {
private Klas klas1 = new Klas("1B");
private Klas klas2 = new Klas("1A");
public Flist() {
initComponents();
vulGemeenten();
maakStudenten();
}
public void vulGemeenten(){
kmodel.addAll(Klas.klassen.toArray());
}
public void maakStudenten(){
klas1.nieuweStudent("Schokkele","William", 30);
klas1.nieuweStudent("De Deurwaerder","Jan", 30);
klas1.nieuweStudent("Peeters","Jeannine", 30);
klas1.nieuweStudent("Taar","Guy", 30);
klas1.nieuweStudent("Berten","Fran", 30);
klas2.nieuweStudent("Janssens","Eddy", 30);
klas2.nieuweStudent("Ten Schap","W", 30);
klas2.nieuweStudent("Notredame","Elke", 30);
}
private void initComponents() {
pKlassen = new javax.swing.JPanel();
jScrollPane2 = new javax.swing.JScrollPane();
lstKlassen = new JList(kmodel);
lstKlassen.setCellRenderer(kcr);
pStudenten = new javax.swing.JPanel();
jScrollPane3 = new javax.swing.JScrollPane();
lstStudenten = new JList(smodel);
lstStudenten.setCellRenderer(scr);
getContentPane().setLayout(new javax.swing.BoxLayout(getContentPane(), javax.swing.BoxLayout.X_AXIS));
addWindowListener(new java.awt.event.WindowAdapter() {
public void windowClosing(java.awt.event.WindowEvent evt) {
exitForm(evt);
}
});
pKlassen.setLayout(new javax.swing.BoxLayout(pKlassen, javax.swing.BoxLayout.Y_AXIS));
pKlassen.setBorder(new javax.swing.border.CompoundBorder(new javax.swing.border.TitledBorder("Klassen"), new javax.swing.border.EmptyBorder(new java.awt.Insets(10, 10, 10, 10))));
lstKlassen.addListSelectionListener(new javax.swing.event.ListSelectionListener() {
public void valueChanged(javax.swing.event.ListSelectionEvent evt) {
lstKlassenValueChanged(evt);
}
});
jScrollPane2.setViewportView(lstKlassen);
pKlassen.add(jScrollPane2);
getContentPane().add(pKlassen);
pStudenten.setLayout(new javax.swing.BoxLayout(pStudenten, javax.swing.BoxLayout.Y_AXIS));
pStudenten.setBorder(new javax.swing.border.CompoundBorder(new javax.swing.border.TitledBorder("Studenten"), new javax.swing.border.EmptyBorder(new java.awt.Insets(10, 10, 10, 10))));
jScrollPane3.setViewportView(lstStudenten);
pStudenten.add(jScrollPane3);
getContentPane().add(pStudenten);
pack();
}
private void lstKlassenValueChanged(javax.swing.event.ListSelectionEvent evt) {
smodel.clear();
Klas k = (Klas)lstKlassen.getSelectedValue();
Iterator it = k.studenten.iterator();
while(it.hasNext()){
smodel.addElement(it.next());
}
}
private void exitForm(java.awt.event.WindowEvent evt) {
System.exit(0);
}
public static void main(String args[]) {
new Flist().show();
}
// Variables declaration - do not modify
private javax.swing.JScrollPane jScrollPane2;
private javax.swing.JScrollPane jScrollPane3;
private javax.swing.JList lstKlassen;
private javax.swing.JList lstStudenten;
private javax.swing.JPanel pKlassen;
private javax.swing.JPanel pStudenten;
// End of variables declaration
SortedListModel kmodel = new SortedListModel("Klas");
SortedListModel smodel = new SortedListModel("Student");
stCellRenderer scr = new stCellRenderer();
kCellRenderer kcr = new kCellRenderer();
}
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.
import javax.swing.*;
import java.net.*;
public class Ffotoshow extends javax.swing.JFrame {
private String[] figuurnamen = { "aap", "ezel", "geit","varken","eend","hond","koe","hert","poes"};
ImageIcon[] figuren = new ImageIcon[figuurnamen.length];
public Ffotoshow() {
initComponents();
laadFiguren();
lstDieren.setSelectedIndex(0);
}
public void laadFiguren(){
for (int i = 0; i < figuren.length ; i++) {
String figuurnaam = "figuren/" +figuurnamen[i] + ".jpg";
URL iconURL = Ffotoshow.class.getResource(figuurnaam);
ImageIcon icon = new ImageIcon(iconURL);
figuren[i] = icon;
}
}
private void initComponents() {
jSplitPane1 = new javax.swing.JSplitPane();
jPanel1 = new javax.swing.JPanel();
jScrollPane1 = new javax.swing.JScrollPane();
lstDieren = new JList(figuurnamen);
jPanel2 = new javax.swing.JPanel();
jScrollPane2 = new javax.swing.JScrollPane();
lblFig = new javax.swing.JLabel();
getContentPane().setLayout(new java.awt.FlowLayout());
setTitle("Werken met JSplitPane");
addWindowListener(new java.awt.event.WindowAdapter() {
public void windowClosing(java.awt.event.WindowEvent evt) {
exitForm(evt);
}
});
jSplitPane1.setDividerLocation(150);
jSplitPane1.setOneTouchExpandable(true);
jPanel1.setPreferredSize(new java.awt.Dimension(200, 110));
jScrollPane1.setPreferredSize(new java.awt.Dimension(100, 100));
lstDieren.addListSelectionListener(new javax.swing.event.ListSelectionListener() {
public void valueChanged(javax.swing.event.ListSelectionEvent evt) {
lstDierenValueChanged(evt);
}
});
jScrollPane1.setViewportView(lstDieren);
jPanel1.add(jScrollPane1);
jSplitPane1.setLeftComponent(jPanel1);
jScrollPane2.setPreferredSize(new java.awt.Dimension(90, 90));
lblFig.setPreferredSize(new java.awt.Dimension(100, 100));
jScrollPane2.setViewportView(lblFig);
jPanel2.add(jScrollPane2);
jSplitPane1.setRightComponent(jPanel2);
getContentPane().add(jSplitPane1);
pack();
}
private void lstDierenValueChanged(javax.swing.event.ListSelectionEvent evt) {
lblFig.setIcon(figuren[lstDieren.getSelectedIndex()]);
}
private void exitForm(java.awt.event.WindowEvent evt) {
System.exit(0);
}
public static void main(String args[]) {
new Ffotoshow().show();
}
// Variables declaration - do not modify
private javax.swing.JPanel jPanel1;
private javax.swing.JPanel jPanel2;
private javax.swing.JScrollPane jScrollPane1;
private javax.swing.JScrollPane jScrollPane2;
private javax.swing.JSplitPane jSplitPane1;
private javax.swing.JLabel lblFig;
private javax.swing.JList lstDieren;
// End of variables declaration
}
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.
public class FtabbedPane extends javax.swing.JFrame {
public FtabbedPane() {
initComponents();
}
private void initComponents() {
jTabbedPane1 = new javax.swing.JTabbedPane();
jPanel1 = new javax.swing.JPanel();
jLabel1 = new javax.swing.JLabel();
jPanel2 = new javax.swing.JPanel();
jLabel2 = new javax.swing.JLabel();
jPanel3 = new javax.swing.JPanel();
jLabel3 = new javax.swing.JLabel();
setTitle("Werken met JTabbedPane");
addWindowListener(new java.awt.event.WindowAdapter() {
public void windowClosing(java.awt.event.WindowEvent evt) {
exitForm(evt);
}
});
jTabbedPane1.setPreferredSize(new java.awt.Dimension(400, 200));
jLabel1.setText("Welkom bij de eerste tab");
jPanel1.add(jLabel1);
jTabbedPane1.addTab("Eerste tab", null, jPanel1, "Ik ben de eerste tab");
jLabel2.setText("Welkom bij de tweede tab");
jPanel2.add(jLabel2);
jTabbedPane1.addTab("Tweede Tab", new javax.swing.ImageIcon(getClass().getResource("zoek.gif")), jPanel2, "Ik ben de tweede tab");
jLabel3.setText("Welkom bij de derde tab");
jPanel3.add(jLabel3);
jTabbedPane1.addTab("Derde tab", new javax.swing.ImageIcon(getClass().getResource("/hits.gif")), jPanel3, "Ik ben de derde tab");
getContentPane().add(jTabbedPane1, java.awt.BorderLayout.CENTER);
pack();
}
private void exitForm(java.awt.event.WindowEvent evt) {
System.exit(0);
}
public static void main(String args[]) {
new FtabbedPane().show();
}
// Variables declaration - do not modify
private javax.swing.JLabel jLabel1;
private javax.swing.JLabel jLabel2;
private javax.swing.JLabel jLabel3;
private javax.swing.JPanel jPanel1;
private javax.swing.JPanel jPanel2;
private javax.swing.JPanel jPanel3;
private javax.swing.JTabbedPane jTabbedPane1;
// End of variables declaration
}
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.
![]() |
![]() |
public class FToolBar extends javax.swing.JFrame {
public FToolBar() {
initComponents();
}
private void initComponents() {
jPanel1 = new javax.swing.JPanel();
jToolBar1 = new javax.swing.JToolBar();
jButton1 = new javax.swing.JButton();
jButton2 = new javax.swing.JButton();
lbl = new javax.swing.JLabel();
getContentPane().setLayout(new java.awt.BorderLayout(10, 20));
setTitle("Werken met JToolBar");
addWindowListener(new java.awt.event.WindowAdapter() {
public void windowClosing(java.awt.event.WindowEvent evt) {
exitForm(evt);
}
});
jPanel1.setLayout(new java.awt.BorderLayout());
jPanel1.setPreferredSize(new java.awt.Dimension(200, 100));
jButton1.setText("Toon Label");
jButton1.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButton1ActionPerformed(evt);
}
});
jToolBar1.add(jButton1);
jButton2.setText("Verberg Label");
jButton2.setEnabled(false);
jButton2.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButton2ActionPerformed(evt);
}
});
jToolBar1.add(jButton2);
jPanel1.add(jToolBar1, java.awt.BorderLayout.NORTH);
lbl.setText("Tekst in een label");
lbl.setVisible(false);
jPanel1.add(lbl, java.awt.BorderLayout.CENTER);
getContentPane().add(jPanel1, java.awt.BorderLayout.EAST);
pack();
}
private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {
lbl.setVisible(false);
jButton1.setEnabled(true);
jButton2.setEnabled(false);
}
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
lbl.setVisible(true);
jButton1.setEnabled(false);
jButton2.setEnabled(true);
}
private void exitForm(java.awt.event.WindowEvent evt) {
System.exit(0);
}
public static void main(String args[]) {
new FToolBar().show();
}
// Variables declaration - do not modify
private javax.swing.JButton jButton1;
private javax.swing.JButton jButton2;
private javax.swing.JPanel jPanel1;
private javax.swing.JToolBar jToolBar1;
private javax.swing.JLabel lbl;
// End of variables declaration
}
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.
import java.awt.event.*;
import javax.swing.*;
public class FCheckBox extends javax.swing.JFrame {
public FCheckBox() {
initComponents();
}
private void initComponents() {
jPanel2 = new javax.swing.JPanel();
jPanel1 = new javax.swing.JPanel();
chkJ = new javax.swing.JCheckBox();
chkC = new javax.swing.JCheckBox();
chkV = new javax.swing.JCheckBox();
jPanel3 = new javax.swing.JPanel();
jScrollPane1 = new javax.swing.JScrollPane();
lstKeuze = new JList(pModel);
setTitle("Werken met JCheckBox");
addWindowListener(new java.awt.event.WindowAdapter() {
public void windowClosing(java.awt.event.WindowEvent evt) {
exitForm(evt);
}
});
jPanel1.setBorder(new javax.swing.border.TitledBorder("Interessante programmeertalen"));
chkJ.setText("Java");
chkJ.addItemListener(new java.awt.event.ItemListener() {
public void itemStateChanged(java.awt.event.ItemEvent evt) {
actie(evt);
}
});
jPanel1.add(chkJ);
chkC.setText("C#");
chkC.addItemListener(new java.awt.event.ItemListener() {
public void itemStateChanged(java.awt.event.ItemEvent evt) {
actie(evt);
}
});
jPanel1.add(chkC);
chkV.setText("VB.net");
chkV.addItemListener(new java.awt.event.ItemListener() {
public void itemStateChanged(java.awt.event.ItemEvent evt) {
actie(evt);
}
});
jPanel1.add(chkV);
getContentPane().add(jPanel1, java.awt.BorderLayout.NORTH);
jPanel3.setBorder(new javax.swing.border.TitledBorder("Mijn keuze"));
jScrollPane1.setPreferredSize(new java.awt.Dimension(200, 100));
jScrollPane1.setViewportView(lstKeuze);
jPanel3.add(jScrollPane1);
getContentPane().add(jPanel3, java.awt.BorderLayout.SOUTH);
pack();
}
private void actie(java.awt.event.ItemEvent evt) {
JCheckBox cb = (JCheckBox)evt.getSource();
if( evt.getStateChange() == ItemEvent.SELECTED){
pModel.addElement(cb.getText());
} else {
pModel.removeElement(cb.getText());
}
}
private void exitForm(java.awt.event.WindowEvent evt) {
System.exit(0);
}
public static void main(String args[]) {
new FCheckBox().show();
}
// Variables declaration - do not modify
private javax.swing.JCheckBox chkC;
private javax.swing.JCheckBox chkJ;
private javax.swing.JCheckBox chkV;
private javax.swing.JPanel jPanel1;
private javax.swing.JPanel jPanel2;
private javax.swing.JPanel jPanel3;
private javax.swing.JScrollPane jScrollPane1;
private javax.swing.JList lstKeuze;
// End of variables declaration
SortedListModel pModel = new SortedListModel();
}
import javax.swing.*;
import java.text.Collator;
import java.util.*;
//We erven over van de klasse AbstractListModel:
//Een klasse 'lege' klasse voor het maken van een lijstmodel
public class SortedListModel extends AbstractListModel
{
//Algemene variabelen
//model is van het type Treeset: wordt automatisch gesorteerd
TreeSet model;
//Een comparator voor het sorteren,
//wordt gebruikt omdat een standaardcomparator geen Collator gebruikt:
//een Collator houdt rekening met lokale taalinstellingen
//voor het maken van de Comparator maken we gebruik van een anonieme binnenklasse
//met supertype de intrface Comparator
private static Comparator MIJN_COMPARATOR
= new Comparator()
{
public int compare( Object o1, Object o2 )
{
String str1 = o1.toString();
String str2 = o2.toString();
Collator collator = Collator.getInstance();
int result = collator.compare( str1, str2 );
return result;
}
};
//Constructor voor de klasse
//We geven de comparator mee, zodat de treeset deze comparator gebruikt
public SortedListModel()
{
model = new TreeSet( MIJN_COMPARATOR );
}
// methoden voor het listmodel
//de methode getSize van het model retourneert de size van de Treeset
//Aantal elementen in de lijst
public int getSize()
{
return model.size();
}
//Element op een aangegeven positie
//toArray() uit de interface Collection toegepast op een Treeset:
//omvormen van een lijst-object naar een Array
public Object getElementAt( int index )
{
return model.toArray()[index];
}
//Element toevoegen
//Een subklasse van AbstractListModel moet de methode fireContentsChanged aanroepen
//wanneer een element wordt gewijzigd of toegevoegd. Als argument wordt de bron (this)
//En het bereik waar werd gewijzigd (begin,einde) meegegeven
public void addElement( Object element )
{
if( model.add( element ))
{
fireContentsChanged( this, 0, getSize() );
}
}
//unieke en niet lege elementen toevoegen
public void addUElement( Object element)
{
if (!(model.contains(element) || element.equals(""))){
if( model.add( element ))
{
fireContentsChanged( this, 0, getSize() );
}
}
}
//Een array van elementen toevoegen
public void addAll( Object elements[] )
{
Collection c = Arrays.asList(elements);
model.addAll(c);
fireContentsChanged( this, 0, getSize() );
}
//lijst leegmaken
public void clear()
{
model.clear();
fireContentsChanged( this, 0, getSize() );
}
//contains retourneert true als het item in de set aanwezig is
public boolean contains( Object element )
{
return model.contains( element );
}
//retourneer het eerste element
public Object firstElement()
{
return model.first();
}
//een iterator voor de lijst
public Iterator iterator()
{
return model.iterator();
}
//laatste element uit de lijst
public Object lastElement()
{
// Return the appropriate element
return model.last();
}
//verwijder een element
public boolean removeElement( Object element )
{
boolean removed = model.remove( element );
if( removed )
{
fireContentsChanged( this, 0, getSize() );
}
return removed;
}
//retourneert de positie van een element
public int getPosition(Object element){
Iterator it = this.iterator();
int pos = 0;
while(it.hasNext()){
if(it.next().equals(element)){
break;
}
pos++;
}
return pos;
}
}
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.
import javax.swing.*;
public class FRadioButton extends javax.swing.JFrame {
public FRadioButton() {
initComponents();
}
private void initComponents() {
rbgroep = new javax.swing.ButtonGroup();
jPanel1 = new javax.swing.JPanel();
rbl = new javax.swing.JRadioButton();
rbg = new javax.swing.JRadioButton();
rbs = new javax.swing.JRadioButton();
jPanel2 = new javax.swing.JPanel();
lbl = new javax.swing.JLabel();
setTitle("Werken met JRadioButton");
addWindowListener(new java.awt.event.WindowAdapter() {
public void windowClosing(java.awt.event.WindowEvent evt) {
exitForm(evt);
}
});
jPanel1.setBorder(new javax.swing.border.TitledBorder("Maak je keuze"));
rbl.setText("Langzaam");
rbgroep.add(rbl);
rbl.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
actie(evt);
}
});
jPanel1.add(rbl);
rbg.setText("Gemiddeld");
rbgroep.add(rbg);
rbg.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
actie(evt);
}
});
jPanel1.add(rbg);
rbs.setText("Snel");
rbgroep.add(rbs);
rbs.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
actie(evt);
}
});
jPanel1.add(rbs);
getContentPane().add(jPanel1, java.awt.BorderLayout.NORTH);
jPanel2.setBorder(new javax.swing.border.TitledBorder("Jouw keuze:"));
jPanel2.setPreferredSize(new java.awt.Dimension(200, 50));
jPanel2.add(lbl);
getContentPane().add(jPanel2, java.awt.BorderLayout.SOUTH);
pack();
}
private void actie(java.awt.event.ActionEvent evt) {
JRadioButton rb = (JRadioButton)evt.getSource();
lbl.setText(rb.getText());
}
private void exitForm(java.awt.event.WindowEvent evt) {
System.exit(0);
}
public static void main(String args[]) {
new FRadioButton().show();
}
// Variables declaration - do not modify
private javax.swing.JPanel jPanel1;
private javax.swing.JPanel jPanel2;
private javax.swing.JLabel lbl;
private javax.swing.JRadioButton rbg;
private javax.swing.ButtonGroup rbgroep;
private javax.swing.JRadioButton rbl;
private javax.swing.JRadioButton rbs;
// End of variables declaration
}
Een JSlider kan je gebruiken om waarden te visualiseren en in te stellen met behulp van een schuifregelaar
public class FSlider extends javax.swing.JFrame {
public FSlider() {
initComponents();
toonWaarde();
}
public void toonWaarde(){
lblWaarde.setText("Waarde: " +Integer.toString(jSlider1.getValue()));
}
private void initComponents() {
jPanel1 = new javax.swing.JPanel();
jSlider1 = new javax.swing.JSlider();
lblWaarde = new javax.swing.JLabel();
setTitle("Werken met JSlider");
addWindowListener(new java.awt.event.WindowAdapter() {
public void windowClosing(java.awt.event.WindowEvent evt) {
exitForm(evt);
}
});
jPanel1.setLayout(new java.awt.BorderLayout(0, 20));
jPanel1.setBorder(new javax.swing.border.TitledBorder("Kies een waarde met de JSlider"));
jSlider1.setMajorTickSpacing(5);
jSlider1.setMaximum(30);
jSlider1.setMinorTickSpacing(1);
jSlider1.setPaintLabels(true);
jSlider1.setPaintTicks(true);
jSlider1.setSnapToTicks(true);
jSlider1.setValue(15);
jSlider1.addChangeListener(new javax.swing.event.ChangeListener() {
public void stateChanged(javax.swing.event.ChangeEvent evt) {
jSlider1StateChanged(evt);
}
});
jPanel1.add(jSlider1, java.awt.BorderLayout.NORTH);
lblWaarde.setText("Waarde: ");
jPanel1.add(lblWaarde, java.awt.BorderLayout.SOUTH);
getContentPane().add(jPanel1, java.awt.BorderLayout.CENTER);
pack();
}
private void jSlider1StateChanged(javax.swing.event.ChangeEvent evt) {
toonWaarde();
}
private void exitForm(java.awt.event.WindowEvent evt) {
System.exit(0);
}
public static void main(String args[]) {
new FSlider().show();
}
// Variables declaration - do not modify
private javax.swing.JPanel jPanel1;
private javax.swing.JSlider jSlider1;
private javax.swing.JLabel lblWaarde;
// End of variables declaration
}
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.
import javax.swing.*;
public class FSpinner extends javax.swing.JFrame {
public String[] maanden = {"januari","februari","maart","april","mei", "juni","juli","augustus","september","oktober","november","december"};
public FSpinner() {
initComponents();
}
private void initComponents() {
jPanel1 = new javax.swing.JPanel();
spStandaard = new javax.swing.JSpinner();
jPanel2 = new javax.swing.JPanel();
SpinnerListModel maandModel = new SpinnerListModel(maanden);
spMaanden = new JSpinner(maandModel);
jPanel3 = new javax.swing.JPanel();
SpinnerNumberModel getalModel = new SpinnerNumberModel(50,0,200,5); //initieel, min, max, stap
spGetallen = new JSpinner(getalModel);
jPanel4 = new javax.swing.JPanel();
jLabel1 = new javax.swing.JLabel();
lblWaarde = new javax.swing.JLabel();
getContentPane().setLayout(new javax.swing.BoxLayout(getContentPane(), javax.swing.BoxLayout.Y_AXIS));
setTitle("Werken met JSpinner");
addWindowListener(new java.awt.event.WindowAdapter() {
public void windowClosing(java.awt.event.WindowEvent evt) {
exitForm(evt);
}
});
jPanel1.setBorder(new javax.swing.border.TitledBorder("Standaard"));
spStandaard.setPreferredSize(new java.awt.Dimension(150, 20));
spStandaard.addChangeListener(new javax.swing.event.ChangeListener() {
public void stateChanged(javax.swing.event.ChangeEvent evt) {
spActie(evt);
}
});
jPanel1.add(spStandaard);
getContentPane().add(jPanel1);
jPanel2.setBorder(new javax.swing.border.TitledBorder("SpinnerListModel"));
spMaanden.setPreferredSize(new java.awt.Dimension(150, 20));
spMaanden.addChangeListener(new javax.swing.event.ChangeListener() {
public void stateChanged(javax.swing.event.ChangeEvent evt) {
spActie(evt);
}
});
jPanel2.add(spMaanden);
getContentPane().add(jPanel2);
jPanel3.setBorder(new javax.swing.border.TitledBorder("SpinnerNumberModel"));
spGetallen.setPreferredSize(new java.awt.Dimension(150, 20));
spGetallen.addChangeListener(new javax.swing.event.ChangeListener() {
public void stateChanged(javax.swing.event.ChangeEvent evt) {
spActie(evt);
}
});
jPanel3.add(spGetallen);
getContentPane().add(jPanel3);
jPanel4.setLayout(new java.awt.FlowLayout(java.awt.FlowLayout.LEFT, 20, 5));
jPanel4.setBorder(new javax.swing.border.TitledBorder("Verandering"));
jLabel1.setText("Waarde:");
jPanel4.add(jLabel1);
jPanel4.add(lblWaarde);
getContentPane().add(jPanel4);
pack();
}
private void spActie(javax.swing.event.ChangeEvent evt) {
JSpinner sp = (JSpinner)evt.getSource();
lblWaarde.setText(sp.getValue().toString());
}
private void exitForm(java.awt.event.WindowEvent evt) {
System.exit(0);
}
public static void main(String args[]) {
new FSpinner().show();
}
// Variables declaration - do not modify
private javax.swing.JLabel jLabel1;
private javax.swing.JPanel jPanel1;
private javax.swing.JPanel jPanel2;
private javax.swing.JPanel jPanel3;
private javax.swing.JPanel jPanel4;
private javax.swing.JLabel lblWaarde;
private javax.swing.JSpinner spGetallen;
private javax.swing.JSpinner spMaanden;
private javax.swing.JSpinner spStandaard;
// End of variables declaration
}
Een tekstgebied voor meerdere lijnen tekst.
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class FTextArea extends javax.swing.JFrame {
public FTextArea() {
initComponents();
toonAantalTekens();
}
public void toonAantalTekens(){
lblAantal.setText(Integer.toString((ta.getDocument().getLength())));
}
private void initComponents() {
jPanel5 = new javax.swing.JPanel();
jPanel1 = new javax.swing.JPanel();
jPanel2 = new javax.swing.JPanel();
txtInput = new javax.swing.JTextField();
jScrollPane1 = new javax.swing.JScrollPane();
ta = new JTextArea(5,20);
ta.setFont(new Font("Serif", Font.ITALIC, 16));
jPanel4 = new javax.swing.JPanel();
jPanel3 = new javax.swing.JPanel();
jLabel1 = new javax.swing.JLabel();
lblAantal = new javax.swing.JLabel();
jLabel3 = new javax.swing.JLabel();
SpinnerNumberModel getalModel = new SpinnerNumberModel(16,10,40,2);
spLetter = new JSpinner(getalModel);
jLabel5 = new javax.swing.JLabel();
chkWrap = new javax.swing.JCheckBox();
getContentPane().setLayout(new java.awt.FlowLayout());
setTitle("Werken met JTextArea");
addWindowListener(new java.awt.event.WindowAdapter() {
public void windowClosing(java.awt.event.WindowEvent evt) {
exitForm(evt);
}
});
jPanel1.setBorder(new javax.swing.border.TitledBorder("Ingave"));
jPanel1.setPreferredSize(new java.awt.Dimension(250, 250));
jPanel2.setLayout(new java.awt.BorderLayout(0, 10));
txtInput.setText("Tik hier om tekst toe te voegen");
txtInput.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
txtInputActionPerformed(evt);
}
});
jPanel2.add(txtInput, java.awt.BorderLayout.NORTH);
jScrollPane1.setPreferredSize(new java.awt.Dimension(200, 150));
ta.setText("Hier kan je ook tikken\n");
ta.setPreferredSize(new java.awt.Dimension(200, 150));
ta.addKeyListener(new java.awt.event.KeyAdapter() {
public void keyTyped(java.awt.event.KeyEvent evt) {
taKeyTyped(evt);
}
});
jScrollPane1.setViewportView(ta);
jPanel2.add(jScrollPane1, java.awt.BorderLayout.SOUTH);
jPanel1.add(jPanel2);
getContentPane().add(jPanel1);
jPanel4.setBorder(new javax.swing.border.TitledBorder("Instellingen"));
jPanel4.setPreferredSize(new java.awt.Dimension(250, 250));
jPanel3.setLayout(new java.awt.GridLayout(5, 2, 20, 0));
jPanel3.setPreferredSize(new java.awt.Dimension(200, 127));
jLabel1.setText("Aantal Tekens:");
jPanel3.add(jLabel1);
lblAantal.setHorizontalAlignment(javax.swing.SwingConstants.RIGHT);
lblAantal.setText("jLabel2");
jPanel3.add(lblAantal);
jLabel3.setText("Lettergrootte:");
jPanel3.add(jLabel3);
spLetter.setPreferredSize(new java.awt.Dimension(50, 20));
spLetter.addChangeListener(new javax.swing.event.ChangeListener() {
public void stateChanged(javax.swing.event.ChangeEvent evt) {
spLetterStateChanged(evt);
}
});
jPanel3.add(spLetter);
jLabel5.setText("Wordwrap:");
jPanel3.add(jLabel5);
chkWrap.setHorizontalAlignment(javax.swing.SwingConstants.RIGHT);
chkWrap.addItemListener(new java.awt.event.ItemListener() {
public void itemStateChanged(java.awt.event.ItemEvent evt) {
chkWrapItemStateChanged(evt);
}
});
jPanel3.add(chkWrap);
jPanel4.add(jPanel3);
getContentPane().add(jPanel4);
pack();
}
private void chkWrapItemStateChanged(java.awt.event.ItemEvent evt) {
boolean b = chkWrap.isSelected();
ta.setLineWrap(b); //wrappen mogelijk
ta.setWrapStyleWord(b); //wrappen op volledige woorden
}
private void spLetterStateChanged(javax.swing.event.ChangeEvent evt) {
int grootte;
SpinnerNumberModel spnm = (SpinnerNumberModel)spLetter.getModel();
grootte = spnm.getNumber().intValue();
ta.setFont(new Font("Serif", Font.ITALIC, grootte));
}
private void taKeyTyped(java.awt.event.KeyEvent evt) {
toonAantalTekens();
}
private void txtInputActionPerformed(java.awt.event.ActionEvent evt) {
ta.append(txtInput.getText() +"\n");
toonAantalTekens();
}
private void exitForm(java.awt.event.WindowEvent evt) {
System.exit(0);
}
public static void main(String args[]) {
new FTextArea().show();
}
// Variables declaration - do not modify
private javax.swing.JCheckBox chkWrap;
private javax.swing.JLabel jLabel1;
private javax.swing.JLabel jLabel3;
private javax.swing.JLabel jLabel5;
private javax.swing.JPanel jPanel1;
private javax.swing.JPanel jPanel2;
private javax.swing.JPanel jPanel3;
private javax.swing.JPanel jPanel4;
private javax.swing.JPanel jPanel5;
private javax.swing.JScrollPane jScrollPane1;
private javax.swing.JLabel lblAantal;
private javax.swing.JSpinner spLetter;
private javax.swing.JTextArea ta;
private javax.swing.JTextField txtInput;
// End of variables declaration
}
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.
public class Taak {
public final static int EINDE = 100;
private int voortgang = 0;
public Taak() {
}
public int getVoortgang(){
return voortgang;
}
/* doeActie: verhoogt de voortgang
* retourneert een boolean: er moet nog / niet meer gewerkt worden */
public boolean doeActie(){
boolean b = true; //bijhouden of er nog gewerkt moet worden
if(voortgang >= EINDE) b = false;
voortgang++;
return b;
}
}
import java.awt.*;
import java.awt.event.*;
import java.math.*;
import javax.swing.*;
public class FProgressBarr extends javax.swing.JFrame {
public final static int INTERVAL = 100; //interval in milliseconden
Taak taak1 = new Taak();
Timer timer = new Timer(INTERVAL, new ActionListener() {
public void actionPerformed(ActionEvent evt) {
jPanel1.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
int voortgang = taak1.getVoortgang();
double p = (double)voortgang / (double)Taak.EINDE * 100.0;
BigDecimal procent = new BigDecimal(p);
pb.setValue(voortgang);
pb.setString("Verwerken: " +procent.setScale(1,BigDecimal.ROUND_HALF_UP) +" %");
if(!taak1.doeActie()){
timer.stop();
jPanel1.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
pb.setString("Taak uitgevoerd !");
pb.setValue(0);
}
}
});
public FProgressBarr() {
initComponents();
}
private void initComponents() {
jPanel1 = new javax.swing.JPanel();
cmdStart = new javax.swing.JButton();
pb = new JProgressBar(0,Taak.EINDE);
addWindowListener(new java.awt.event.WindowAdapter() {
public void windowClosing(java.awt.event.WindowEvent evt) {
exitForm(evt);
}
});
cmdStart.setText("Start");
cmdStart.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
cmdStartActionPerformed(evt);
}
});
jPanel1.add(cmdStart);
pb.setString("Druk op Start");
pb.setStringPainted(true);
jPanel1.add(pb);
getContentPane().add(jPanel1, java.awt.BorderLayout.CENTER);
pack();
}
private void cmdStartActionPerformed(java.awt.event.ActionEvent evt) {
timer.start();
cmdStart.setEnabled(false);
}
/** Exit the Application */
private void exitForm(java.awt.event.WindowEvent evt) {
System.exit(0);
}
/**
* @param args the command line arguments
*/
public static void main(String args[]) {
new FProgressBarr().show();
}
// Variables declaration - do not modify
private javax.swing.JButton cmdStart;
private javax.swing.JPanel jPanel1;
private javax.swing.JProgressBar pb;
// End of variables declaration
}
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
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: ![]()
Toon /verberg
import javax.swing.*;
public class FTable1 extends javax.swing.JFrame {
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"};
public FTable1() {
initComponents();
}
private void initComponents() {
jPanel1 = new javax.swing.JPanel();
jScrollPane1 = new javax.swing.JScrollPane();
jTable1 = new JTable(data,kolomkoppen);
addWindowListener(new java.awt.event.WindowAdapter() {
public void windowClosing(java.awt.event.WindowEvent evt) {
exitForm(evt);
}
});
jScrollPane1.setViewportView(jTable1);
jPanel1.add(jScrollPane1);
getContentPane().add(jPanel1, java.awt.BorderLayout.CENTER);
pack();
}
private void exitForm(java.awt.event.WindowEvent evt) {
System.exit(0);
}
public static void main(String args[]) {
new FTable1().show();
}
// Variables declaration - do not modify
private javax.swing.JPanel jPanel1;
private javax.swing.JScrollPane jScrollPane1;
private javax.swing.JTable jTable1;
// End of variables declaration
}
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.
import java.awt.event.*;
import javax.swing.*;
import javax.swing.table.*;
public class FTable1 extends javax.swing.JFrame {
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"};
TableColumn naamkolom = new TableColumn();
public FTable1() {
initComponents();
//naamkolom = jTable1.getColumnModel().getColumn(1);
naamkolom = jTable1.getColumn("Naam");
jSlider1.setValue(naamkolom.getPreferredWidth());
}
private void initComponents() {
jPanel1 = new javax.swing.JPanel();
jScrollPane1 = new javax.swing.JScrollPane();
jTable1 = new JTable(data,kolomkoppen);
jLabel1 = new javax.swing.JLabel();
jSlider1 = new javax.swing.JSlider();
chkVerberg = new javax.swing.JCheckBox();
setTitle("Werken met JTable");
addWindowListener(new java.awt.event.WindowAdapter() {
public void windowClosing(java.awt.event.WindowEvent evt) {
exitForm(evt);
}
});
jPanel1.setLayout(new java.awt.BorderLayout());
jScrollPane1.setPreferredSize(new java.awt.Dimension(454, 100));
jScrollPane1.setViewportView(jTable1);
jPanel1.add(jScrollPane1, java.awt.BorderLayout.NORTH);
jLabel1.setText("Breedte van de naamkolom:");
jPanel1.add(jLabel1, java.awt.BorderLayout.WEST);
jSlider1.setMajorTickSpacing(50);
jSlider1.setMaximum(300);
jSlider1.setMinimum(50);
jSlider1.setMinorTickSpacing(10);
jSlider1.setPaintLabels(true);
jSlider1.setPaintTicks(true);
jSlider1.setSnapToTicks(true);
jSlider1.addChangeListener(new javax.swing.event.ChangeListener() {
public void stateChanged(javax.swing.event.ChangeEvent evt) {
jSlider1StateChanged(evt);
}
});
jPanel1.add(jSlider1, java.awt.BorderLayout.CENTER);
chkVerberg.setText("Verberg naamkolom");
chkVerberg.addItemListener(new java.awt.event.ItemListener() {
public void itemStateChanged(java.awt.event.ItemEvent evt) {
chkVerbergItemStateChanged(evt);
}
});
jPanel1.add(chkVerberg, java.awt.BorderLayout.SOUTH);
getContentPane().add(jPanel1, java.awt.BorderLayout.CENTER);
pack();
}
private void chkVerbergItemStateChanged(java.awt.event.ItemEvent evt) {
if( chkVerberg.isSelected()){
jTable1.removeColumn(naamkolom);
} else {
jTable1.addColumn(naamkolom);
jTable1.moveColumn(jTable1.getColumnCount()-1 ,1);
}
}
private void jSlider1StateChanged(javax.swing.event.ChangeEvent evt) {
naamkolom.setPreferredWidth(jSlider1.getValue());
}
private void exitForm(java.awt.event.WindowEvent evt) {
System.exit(0);
}
public static void main(String args[]) {
new FTable1().show();
}
// Variables declaration - do not modify
private javax.swing.JCheckBox chkVerberg;
private javax.swing.JLabel jLabel1;
private javax.swing.JPanel jPanel1;
private javax.swing.JScrollPane jScrollPane1;
private javax.swing.JSlider jSlider1;
private javax.swing.JTable jTable1;
// End of variables declaration
}
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.
import javax.swing.*;
import javax.swing.event.*;
public class FTable1 extends javax.swing.JFrame {
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"};
public FTable1() {
initComponents();
jTable1.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
ListSelectionModel SM = jTable1.getSelectionModel();
SM.addListSelectionListener(new ListSelectionListener() {
public void valueChanged(ListSelectionEvent e) {
if (e.getValueIsAdjusting()) return;
int rij = jTable1.getSelectedRow();
lblResultaat.setText("Rij: " +rij );
}
});
}
private void initComponents() {
rbGroep = new javax.swing.ButtonGroup();
jPanel1 = new javax.swing.JPanel();
jScrollPane1 = new javax.swing.JScrollPane();
jTable1 = new JTable(data,kolomkoppen);
jTable1.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
jPanel3 = new javax.swing.JPanel();
lblResultaat = new javax.swing.JLabel();
setTitle("Werken met JTable");
addWindowListener(new java.awt.event.WindowAdapter() {
public void windowClosing(java.awt.event.WindowEvent evt) {
exitForm(evt);
}
});
jPanel1.setLayout(new java.awt.BorderLayout());
jScrollPane1.setPreferredSize(new java.awt.Dimension(454, 100));
jScrollPane1.setViewportView(jTable1);
jPanel1.add(jScrollPane1, java.awt.BorderLayout.NORTH);
getContentPane().add(jPanel1, java.awt.BorderLayout.CENTER);
jPanel3.setLayout(new java.awt.FlowLayout(java.awt.FlowLayout.LEFT));
lblResultaat.setHorizontalAlignment(javax.swing.SwingConstants.LEFT);
lblResultaat.setText("Maak een selectie");
jPanel3.add(lblResultaat);
getContentPane().add(jPanel3, java.awt.BorderLayout.SOUTH);
pack();
}
private void exitForm(java.awt.event.WindowEvent evt) {
System.exit(0);
}
public static void main(String args[]) {
new FTable1().show();
}
// Variables declaration - do not modify
private javax.swing.JPanel jPanel1;
private javax.swing.JPanel jPanel3;
private javax.swing.JScrollPane jScrollPane1;
private javax.swing.JTable jTable1;
private javax.swing.JLabel lblResultaat;
private javax.swing.ButtonGroup rbGroep;
// End of variables declaration
}
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.
import javax.swing.*;
import javax.swing.event.*;
public class FTable3 extends javax.swing.JFrame {
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"};
public FTable3() {
initComponents();
jTable1.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
ListSelectionModel SM = jTable1.getSelectionModel();
SM.addListSelectionListener(new ListSelectionListener() {
public void valueChanged(ListSelectionEvent e) {
if (e.getValueIsAdjusting()) return;
int rij = jTable1.getSelectedRow();
lblResultaat.setText("Rij: " +rij );
}
});
jTable1.getColumnModel().getSelectionModel().addListSelectionListener(new ListSelectionListener() {
public void valueChanged(ListSelectionEvent e) {
if (e.getValueIsAdjusting()) return;
int kol = jTable1.getSelectedColumn();
lblKol.setText("/ Kolom: " +kol );
}
});
}
private void initComponents() {
rbGroep = new javax.swing.ButtonGroup();
jPanel1 = new javax.swing.JPanel();
jScrollPane1 = new javax.swing.JScrollPane();
jTable1 = new JTable(data,kolomkoppen);
jTable1.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
jPanel3 = new javax.swing.JPanel();
lblResultaat = new javax.swing.JLabel();
lblKol = new javax.swing.JLabel();
setTitle("Werken met JTable");
addWindowListener(new java.awt.event.WindowAdapter() {
public void windowClosing(java.awt.event.WindowEvent evt) {
exitForm(evt);
}
});
jPanel1.setLayout(new java.awt.BorderLayout());
jScrollPane1.setPreferredSize(new java.awt.Dimension(454, 100));
jScrollPane1.setViewportView(jTable1);
jPanel1.add(jScrollPane1, java.awt.BorderLayout.NORTH);
getContentPane().add(jPanel1, java.awt.BorderLayout.CENTER);
jPanel3.setLayout(new java.awt.FlowLayout(java.awt.FlowLayout.LEFT));
lblResultaat.setHorizontalAlignment(javax.swing.SwingConstants.LEFT);
lblResultaat.setText("Maak een selectie");
jPanel3.add(lblResultaat);
jPanel3.add(lblKol);
getContentPane().add(jPanel3, java.awt.BorderLayout.SOUTH);
pack();
}
private void exitForm(java.awt.event.WindowEvent evt) {
System.exit(0);
}
public static void main(String args[]) {
new FTable3().show();
}
// Variables declaration - do not modify
private javax.swing.JPanel jPanel1;
private javax.swing.JPanel jPanel3;
private javax.swing.JScrollPane jScrollPane1;
private javax.swing.JTable jTable1;
private javax.swing.JLabel lblKol;
private javax.swing.JLabel lblResultaat;
private javax.swing.ButtonGroup rbGroep;
// End of variables declaration
}
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.
import javax.swing.table.*; class MijnTableModel extends AbstractTableModel { 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"}; public int getColumnCount() { return kolomkoppen.length; } public int getRowCount() { return data.length; } public String getColumnName(int col) { return kolomkoppen[col]; } public Object getValueAt(int row, int col) { return data[row][col]; } /* * wordt gebruikt voor een default renderer voor een cell * hierdoor worden bv de booleans weergegeven door aankruisvakjes */ public Class getColumnClass(int c) { return getValueAt(0, c).getClass(); } // data is editeerbaar public boolean isCellEditable(int row, int col) { //eerste twee kolommen in het model zijn niet te editeren if (col < 2) { return false; } else { return true; } } // data kan worden aangepast public void setValueAt(Object value, int row, int col) { data[row][col] = value; fireTableCellUpdated(row, col); } } import javax.swing.*; import javax.swing.event.*; public class FTable5 extends javax.swing.JFrame { public FTable5() { initComponents(); jTable1.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); ListSelectionModel SM = jTable1.getSelectionModel(); SM.addListSelectionListener(new ListSelectionListener() { public void valueChanged(ListSelectionEvent e) { if (e.getValueIsAdjusting()) return; int rij = jTable1.getSelectedRow(); lblResultaat.setText("Rij: " +rij ); } }); } private void initComponents() { rbGroep = new javax.swing.ButtonGroup(); jPanel1 = new javax.swing.JPanel(); jScrollPane1 = new javax.swing.JScrollPane(); jTable1 = new JTable(tm); jTable1.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); jPanel3 = new javax.swing.JPanel(); lblResultaat = new javax.swing.JLabel(); setTitle("Werken met JTable"); addWindowListener(new java.awt.event.WindowAdapter() { public void windowClosing(java.awt.event.WindowEvent evt) { exitForm(evt); } }); jPanel1.setLayout(new java.awt.BorderLayout()); jScrollPane1.setPreferredSize(new java.awt.Dimension(454, 100)); jScrollPane1.setViewportView(jTable1); jPanel1.add(jScrollPane1, java.awt.BorderLayout.NORTH); getContentPane().add(jPanel1, java.awt.BorderLayout.CENTER); jPanel3.setLayout(new java.awt.FlowLayout(java.awt.FlowLayout.LEFT)); lblResultaat.setHorizontalAlignment(javax.swing.SwingConstants.LEFT); lblResultaat.setText("Maak een selectie"); jPanel3.add(lblResultaat); getContentPane().add(jPanel3, java.awt.BorderLayout.SOUTH); pack(); } private void exitForm(java.awt.event.WindowEvent evt) { System.exit(0); } public static void main(String args[]) { new FTable5().show(); } // Variables declaration - do not modify private javax.swing.JPanel jPanel1; private javax.swing.JPanel jPanel3; private javax.swing.JScrollPane jScrollPane1; private javax.swing.JTable jTable1; private javax.swing.JLabel lblResultaat; private javax.swing.ButtonGroup rbGroep; // End of variables declaration private MijnTableModel tm = new MijnTableModel(); }
import java.util.*;
import javax.swing.table.*;
class MijnTableModel extends DefaultTableModel {
public MijnTableModel(Object[][] data,String[] kolomkoppen) {
super (data, kolomkoppen) ;
}
public Class getColumnClass (int kol) {
return getValueAt (0, kol).getClass () ;
}
}
import javax.swing.*;
import javax.swing.event.*;
public class FTable5 extends javax.swing.JFrame {
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"};
public FTable6() {
initComponents();
jTable1.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
ListSelectionModel SM = jTable1.getSelectionModel();
SM.addListSelectionListener(new ListSelectionListener() {
public void valueChanged(ListSelectionEvent e) {
if (e.getValueIsAdjusting()) return;
int rij = jTable1.getSelectedRow();
lblResultaat.setText("Rij: " +rij );
}
});
}
private void initComponents() {
rbGroep = new javax.swing.ButtonGroup();
jPanel1 = new javax.swing.JPanel();
jScrollPane1 = new javax.swing.JScrollPane();
jTable1 = new JTable(tm);
jTable1.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
jPanel3 = new javax.swing.JPanel();
lblResultaat = new javax.swing.JLabel();
setTitle("Werken met JTable");
addWindowListener(new java.awt.event.WindowAdapter() {
public void windowClosing(java.awt.event.WindowEvent evt) {
exitForm(evt);
}
});
jPanel1.setLayout(new java.awt.BorderLayout());
jScrollPane1.setPreferredSize(new java.awt.Dimension(454, 100));
jScrollPane1.setViewportView(jTable1);
jPanel1.add(jScrollPane1, java.awt.BorderLayout.NORTH);
getContentPane().add(jPanel1, java.awt.BorderLayout.CENTER);
jPanel3.setLayout(new java.awt.FlowLayout(java.awt.FlowLayout.LEFT));
lblResultaat.setHorizontalAlignment(javax.swing.SwingConstants.LEFT);
lblResultaat.setText("Maak een selectie");
jPanel3.add(lblResultaat);
getContentPane().add(jPanel3, java.awt.BorderLayout.SOUTH);
pack();
}
private void exitForm(java.awt.event.WindowEvent evt) {
System.exit(0);
}
public static void main(String args[]) {
new FTable6().show();
}
// Variables declaration - do not modify
private javax.swing.JPanel jPanel1;
private javax.swing.JPanel jPanel3;
private javax.swing.JScrollPane jScrollPane1;
private javax.swing.JTable jTable1;
private javax.swing.JLabel lblResultaat;
private javax.swing.ButtonGroup rbGroep;
// End of variables declaration
private MijnTableModel tm = new MijnTableModel(data,kolomkoppen);
}
Meer over JTable bij Sun
| Meer tutorials: |
| leer ook: | html | | xhtml | | css | | asp | | asp.net | | c# | | ado.net | | linq | | ajax | | java | | javascript |







