Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Comment: Migrated to Confluence 5.3

...

Eksempelet under viser hvordan man lager et panel (JPanel) som fyller seg selv med komponenter. Dersom applikasjonen har main-metoden (JFrame) som vist under, vil det skapes et vindu som fylles med panelet MySimpelPanelMySimplePanel.
OBS! Juster størrelsen på vinduet når du tester koden. Dette med layout (BorderLayout) kan du lese mer om her.
 

 

Code Block
languagejava
titleJPanel
linenumberstrue
import java.awt.BorderLayout;


import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextArea;

public class MySimplePanel extends JPanel {
	
	JTextArea inputText = new JTextArea("Skriv litt tekst her da vel...");
	JTextArea text = new JTextArea("Dette er South i layouten :)");
	
	JLabel label = new JLabel("Jeg gleder meg til UKA!");
 
	public MySimplePanel () {	
		this.createGUI();
	}
	
	private void createGUI() {
		setLayout(new BorderLayout());
		
		add(inputText, BorderLayout.NORTH);
		add(label, BorderLayout.WEST);
		add(text, BorderLayout.SOUTH);
		
		text.setEditable(false);
	}
}

 

 

Code Block
languagejava
titleJFrame
linenumberstrue
import javax.swing.JFrame;
 
public static void main(String[] args) {
		
	JFrame frame = new JFrame();
		
	MySimplePanel panel = new MySimplePanel();
		
	frame.setContentPane(panel);
	frame.setTitle("YOLO");
	frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	frame.pack();
	frame.setVisible(true);
}

 

...

Dersom man lager en applikasjon som skal ta i mot brukerinteraksjon (trykking på knapper, tasting på tastatur, museklikk, valg i menyer, osv.), bygger dette videre på strukturen for oppbygning forklart ovenfor. 
Vi ønsker å holde interaksjonen i panelet, ikke i framen.

Prinsippet bak brukerinteraksjon bygger på at man setter lyttere på komponenter på panelet sitt. Det vil si at når en knapp, tast, el. trykkes på, oppfattes dette av en lytteren til denne komponenten (anse dette som automagisk inntil videre) som gir beskjed til panelet om at noe har skjedd, og hva som skjedde. 

For at lytteren skal kunne gi beskjed til panelet, det ha en metode som lytteren vet om. Panelet må derfor implementere ActionListener-interfacet, som innebærer at panelet garantert har metoden void actionPerformed(ActionEvent e).

OBS! Kjør koden, og se under for beskrivelse av sentrale kodelinjer 

Code Block
languagejava
titleJPanel with ActionListener
linenumberstrue
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;

public class MySimplePanel2 extends JPanel implements ActionListener  {
	
	JTextArea inputText = new JTextArea("Skriv litt tekst her da vel...");
	
	JButton btn1 = new JButton("Does nothing");
	JButton btn2 = new JButton("Blanks text");
	
	public MySimplePanel () {
		
		btn1.addActionListener(this);
		btn2.addActionListener(this);
		
		this.createGUI();
	}
	
	private void createGUI() {
		setLayout(new BorderLayout());
		
		JTextArea text = new JTextArea("Dette er South i layouten og bare til info :)");
		
		JPanel panel1 = new JPanel();
		panel1.setLayout(new BorderLayout());
		panel1.add(btn2,BorderLayout.WEST);
		panel1.add(btn1, BorderLayout.EAST);
		
		add(panel1,BorderLayout.NORTH);
		add(inputText, BorderLayout.CENTER);
		add(text,BorderLayout.SOUTH);
		
		text.setEditable(false);
	}
	
	public void actionPerformed(ActionEvent e) {
		
		if (e.getSource() == btn1) {
			JOptionPane.showMessageDialog(null, "Did nothing!");
		}
		if (e.getSource() == btn2) {
			inputText.setText("");
		}
	}
}

NB! Linjenummer i fullskjermvisning

Linje 98-1311: Oppretter globale komponenter som vi må kunne nå fra hele klassen.
Linje 1715-1816: Etter vi har opprettet knappene btn1&2 setter vi en lytter på de. Uten denne lytteren vil det ikke sendes noen beskjed om at knappene har blitt trykket på.

 

 

 

 

 

 

 

Dette eksempelet genererer et vindu med tekst og en knapp. // Eksempelet vil bli forklart med en video senere

Code Block
languagejava
titleSwingeksempel
linenumberstrue
collapsetrue
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JTextArea;

public class GUIExample extends JFrame implements ActionListener  {
	
	JTextArea info = new JTextArea("Hello World!");
	JButton btn = new JButton("Does nothing");
	
	public GUIExample (String title) {
		
		setTitle(title);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		btn.addActionListener(this);
		
		this.createGUI();
	}
	
	private void createGUI() {
		setLayout(new BorderLayout());
		
		add(info, BorderLayout.NORTH);
		add(btn, BorderLayout.SOUTH);
		
	}
	
	public void actionPerformed(ActionEvent e) {
		
		if (e.getSource() == btn) {
			JOptionPane.showMessageDialog(null, "Did nothing!");
		}
	}
	
	public static void main(String[] args) {
		GUIExample gui = new GUIExample("My first swingcode");
		
		gui.pack();
		gui.setVisible(true);
	}
}

 

En kort og brukbar introduksjon til litt flere swingkomponenter kan finnes her (youtube-link).

DENNE SIDEN ER UNDER UTVIKLINGParameteren her angir hvem som skal varsles om hendelsen.
Linje 24: Oppretter en komponent som ikke trenger å være global.
Linje 26-31: Oppretter ett "subpanel" og legger to knapper til Øst og Vest på dette panelet. Deretter legges "subpanelet" til helt øverst på hovedpanelet. Dvs; de to knappene vil ligge øverst på hovedpanelet, og dernest til høyre og venstre.
Linje 38: Funksjonen som lytterne kaller når brukerinteraksjoner foretas. Parameteren e er et Action-objekt som bærer info om hendelsen som har funnet sted.
Linje 40-42: Dersom kilden til hendelsen er btn1 skal det dukke opp et dialogvindu med tekst.
Linje 43-45: Dersom kilden til hendelsen er btn2 skal teksten i til inputText settes blank.