Programmeren in Java/GUI: verschil tussen versies

Verwijderde inhoud Toegevoegde inhoud
Geen bewerkingssamenvatting
Regel 35:
private void createGUI() {
setDefaultCloseOperation(EXIT_ON_CLOSE); // Anders blijft het programma op de achtergrond lopen tot je ctrl-alt-delete typt
Container window = this.getContentPane();
window.setLayout(new FlowLayout());
Regel 81:
}</source>
}}
 
==Events==
Een event is iets wat de gebruiker doet, en waarop het programma kan reageren, bvb. het klikken op een knop. Om hiervan gebruik te kunnen maken, wordt met ''import java.awt.event.*'' en ''import javax.swing.event.*.'' het bijhorende package geïmporteerd, respectievelijk voor componenten met en zonder een overeenkomstig AWT-equivalent. De laatste groep bevat o.m. JSlide. Dit wordt gecombineerd met ''implements ActionListener'' dat de implementatie van een klasse ''actionPerformed(ActionEvent e)'' vereist.
 
{{Code|
| Taal=Java
| Titel=actieKnoppen.java
| Code=<source lang=java>import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
 
public class actieKnoppen extends JFrame
implements ActionListener{
private JTextField tekstveld;
private JLabel tekst, melding;
private JButton knop;
public actieKnoppen() { // constructor
setSize(500, 250);
setTitle("Titeltekst");
//setResizable(false); // voorkomt herschalen
}
public static void main(String[] args) {
actieKnoppen venster = new actieKnoppen();
venster.createGUI();
venster.setVisible(true);
}
private void createGUI(){
setDefaultCloseOperation(EXIT_ON_CLOSE);
Container venster = this.getContentPane();
venster.setLayout(new FlowLayout() );
JPanel bladhoofd = new JPanel(); // hulpconstructie
{
tekst = new JLabel("Geef uw keuze: ");
tekstveld = new JTextField(20);
knop = new JButton("Kies");
melding = new JLabel();
bladhoofd.add(tekst);
bladhoofd.add(tekstveld);
bladhoofd.add(knop);
}
venster.add(bladhoofd);
venster.add(melding);
knop.addActionListener(this);
}
public void actionPerformed(ActionEvent e){
String tkt = "U koos: " +
tekstveld.getText();
melding.setText(tkt);
}
}</source>
}}
 
In bovenstaand voorbeeld wordt eerst het bladhoofd gevuld, en wordt dit vervolgens toegevoegd aan het venster. Dit kan van belang zijn als je een bepaalde schikking wil bekomen (zie verder: FlowLayout).
 
Tekenen kan je met objecten uit de Graphics class: drawString(), drawRect() en fillRect(), drawOval() en fillOval(), drawLine(), drawPolygon() en fillPolygon(), setColor(), setBackground(), ...
 
{{Code|
| Taal=Java
| Titel=tekenblad.java
| Code=<source lang=java>import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
 
public class tekenblad extends JFrame implements ActionListener {
private int breedte = 350, hoogte = 50, horizontaal = 0, verticaal = 10;
private JButton knop1, knop2;
private JPanel blad;
private Graphics g;
public tekenblad() {
setSize(breedte + 100, hoogte + 100);
setTitle("tekenblad");
}
public static void main(String[] args) {
tekenblad frame = new tekenblad();
frame.createGUI();
frame.setVisible(true);
}
private void createGUI(){
setDefaultCloseOperation(EXIT_ON_CLOSE);
Container venster = this.getContentPane();
venster.setLayout(new FlowLayout() );
JPanel knoppen = new JPanel();
venster.add(knoppen);
knop1 = new JButton();
knop1.setText("1");
venster.add(knop1);
knop1.addActionListener(this);
knop2 = new JButton();
knop2.setText("2");
venster.add(knop2);
knop2.addActionListener(this);
blad = new JPanel();
blad.setPreferredSize(new Dimension(breedte,hoogte));
venster.add(blad);
}
public void actionPerformed(ActionEvent e){
horizontaal += 10;
if (horizontaal > breedte) {
horizontaal = 0;
verticaal += 15;
}
String tekst;
if (e.getSource() == knop1) {tekst = "1";}
else {tekst = "" + e.getActionCommand();} // Neemt de tekst op de knop
g = blad.getGraphics();
g.drawString(tekst,horizontaal,verticaal);
}
}</source>
}}
 
Andere grafische objecten die gevoelig zijn voor events zijn: JList met bijhorende ''public void valueChanged(ListSelectionEvent e)'', JScrollPane, JComboBox, JTextArea, JRadioButton, JOptionPane (showConfirmDialog: yes/no/cancel, showInputDialog, showMessageDialog: OK), JMenu (> JMenu > JMenuItem), JSlider, JTabbedPane, JFileChooser, JProgressBar, JColorChooser, ...
 
De eventlisteners kunnen zijn: ActionListener, AdjustmentListener, ComponentListener, ContainerListener, FocusListener, KeyListener,
MouseListener, MouseMotionListener, WindowListener, JFrame, JDialog, JfileDialog, ItemListener, JComboBox, JList, JcheckBox­MenuItem,
TextListener, ...
 
==Layout==
De schikking van de grafische elementen kan gebeuren met LayoutManager:
* FlowLayout
* BorderLayout<table>
<tr><td colspan=3 align=center>N o r t h
<tr><td>Left<td>Center<td>Right
<tr><td colspan=3 align=center>S o u t h
</table>
* GridLayout
* GridBagLayout
* BoxLayout
* CardLayout: tabbladen
 
 
 
Informatie afkomstig van https://nl.wikibooks.org Wikibooks NL.
Wikibooks NL is onderdeel van de wikimediafoundation.