You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 12 Next »

Generelt

Swing er et "lettvekter" API til å lage GUI for java. Swing har en arkitektur som gjør det mulig å legge grafikk til kode, uten å forandre alt for mye på applikasjonen.

Med swing kan man enkelt lage buttons, tekstfelt, check boxes, labels, tabeller og lister, i tillegg til en rekke andre komponenter.
For mer om komponentene og hvordan de virker, se Swing komponenter

Basic komponentbruk og oppbygning

En vanlig måte å bygge opp en GUI-applikasjon med swing er å bruke klassene JFrame og JPanel etter et bestemt mønster.

Konseptet handler om å ha en klasse A, som subklasser (arver) JPanel. A fyller seg selv med komponenter (tekst, buttons, osv.) og danner hele (eller deler) av et vindu.
Merk at en instans av JPanel, et panel, er en komponent på lik linje med et tekstfelt.

En instans av A, a, er altså en komponent utformet slik man ønsker at vinduet sitt skal se ut, men a vil ikke opprette noe vindu som vi kan se og røre ved. Her kommer JFrame inn. En instans av JFrame representeres som et faktisk vindu på skjermen vår. I dette vinduet kan man legge komponenter på lik linje som et panel, men for å skape en struktur fyller vi hele vinduet eller framen med panelet a. Dersom man ønsker en button nederst i vinduet sitt, legges dette altså til i panelet a, ikkeframen.

Forklaring til denne strukturen:

Det er vanlig å strukturere koden slik at klassen tilsvarende et vindu eller panel, typisk en subklasse av JPanel, selv fyller seg med innhold og reagerer på brukerens interaksjon med innholdet (kommer lenger ned).
For mindre applikasjoner uten menylinje er det uvanlig å subklasse JFrame, fordi denne er mindre vanlig å gjenbruke. Istedenfor subklasses JPanel som instansieres i en main-metode sammen med en JFrame og settes som JFramens contentPane.

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 MySimpelPanel.
OBS! Juster størrelsen på vinduet når du tester koden. Dette med layout (BorderLayout) kan du lese mer om her.
 

 

JPanel
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);
	}
}

 

 

JFrame
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);
}

 




 

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

Swingeksempel
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 UTVIKLING

  • No labels