swing low, sweet chariotwiki.juneday.se/mediawiki/images/a/a8/java-concept_och_swing.pdf · ett...
TRANSCRIPT
![Page 1: Swing low, sweet chariotwiki.juneday.se/mediawiki/images/a/a8/Java-concept_och_Swing.pdf · Ett klassbibiliotek som följer med Java Är designat med många OO-concept och -principer](https://reader033.vdocuments.net/reader033/viewer/2022052006/6019ecb87463a35a7b19d777/html5/thumbnails/1.jpg)
Java-concept och SwingSwing low, sweet chariot
![Page 2: Swing low, sweet chariotwiki.juneday.se/mediawiki/images/a/a8/Java-concept_och_Swing.pdf · Ett klassbibiliotek som följer med Java Är designat med många OO-concept och -principer](https://reader033.vdocuments.net/reader033/viewer/2022052006/6019ecb87463a35a7b19d777/html5/thumbnails/2.jpg)
![Page 3: Swing low, sweet chariotwiki.juneday.se/mediawiki/images/a/a8/Java-concept_och_Swing.pdf · Ett klassbibiliotek som följer med Java Är designat med många OO-concept och -principer](https://reader033.vdocuments.net/reader033/viewer/2022052006/6019ecb87463a35a7b19d777/html5/thumbnails/3.jpg)
Javas Swing-API
● En del av Javas standard-API● API - application programming interface● Ett klassbibiliotek som följer med Java● Är designat med många OO-concept och
-principer● Bygger på det äldre AWT (en del klasser
ligger fortfarande i java.awt-paketet.
![Page 4: Swing low, sweet chariotwiki.juneday.se/mediawiki/images/a/a8/Java-concept_och_Swing.pdf · Ett klassbibiliotek som följer med Java Är designat med många OO-concept och -principer](https://reader033.vdocuments.net/reader033/viewer/2022052006/6019ecb87463a35a7b19d777/html5/thumbnails/4.jpg)
En massa paket
De mest centrala paketen är javax.swingoch java.awt
Vad var paket?
En katalog med klasser/interface som hör ihop
![Page 5: Swing low, sweet chariotwiki.juneday.se/mediawiki/images/a/a8/Java-concept_och_Swing.pdf · Ett klassbibiliotek som följer med Java Är designat med många OO-concept och -principer](https://reader033.vdocuments.net/reader033/viewer/2022052006/6019ecb87463a35a7b19d777/html5/thumbnails/5.jpg)
What makes it Swing?
I AWT/Swing finns containers (behållare) och components (komponenter).
Containers är (genom arv) också komponenter
Olika LayoutManagers hanterar placering av komponenter.
![Page 6: Swing low, sweet chariotwiki.juneday.se/mediawiki/images/a/a8/Java-concept_och_Swing.pdf · Ett klassbibiliotek som följer med Java Är designat med många OO-concept och -principer](https://reader033.vdocuments.net/reader033/viewer/2022052006/6019ecb87463a35a7b19d777/html5/thumbnails/6.jpg)
AWT är grunden
I java.awt:Component <- Container <- Window <- FrameI Swing:java.awt.Container <- javax.swing.JComponentjava.awt.Frame <- javax.swing.JFrame
<- javax.swing.JDialog
![Page 7: Swing low, sweet chariotwiki.juneday.se/mediawiki/images/a/a8/Java-concept_och_Swing.pdf · Ett klassbibiliotek som följer med Java Är designat med många OO-concept och -principer](https://reader033.vdocuments.net/reader033/viewer/2022052006/6019ecb87463a35a7b19d777/html5/thumbnails/7.jpg)
Swing-komponenter är containers
En JFrame är ett fönster. I en JFrame kan man lägga komponenter, t ex en JMenuBar. I en JMenuBar kan man lägga en (eller flera) JMenu och i en JMenu kan man lägga flera JMenuItem.
![Page 8: Swing low, sweet chariotwiki.juneday.se/mediawiki/images/a/a8/Java-concept_och_Swing.pdf · Ett klassbibiliotek som följer med Java Är designat med många OO-concept och -principer](https://reader033.vdocuments.net/reader033/viewer/2022052006/6019ecb87463a35a7b19d777/html5/thumbnails/8.jpg)
JFrame - Huvudfönstretimport java.awt.*;import java.awt.event.*;import javax.swing.*; public class SimpleFrame { private static void createAndShowGUI() {
JFrame frame = new JFrame("Simple Frame");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setPreferredSize(new Dimension(480,200)); frame.pack(); frame.setVisible(true); }
public static void main(String[] args){
createAndShowGUI();
}
}
![Page 9: Swing low, sweet chariotwiki.juneday.se/mediawiki/images/a/a8/Java-concept_och_Swing.pdf · Ett klassbibiliotek som följer med Java Är designat med många OO-concept och -principer](https://reader033.vdocuments.net/reader033/viewer/2022052006/6019ecb87463a35a7b19d777/html5/thumbnails/9.jpg)
Konstruktor - String med titelimport java.awt.*;import java.awt.event.*;import javax.swing.*; public class SimpleFrame { private static void createAndShowGUI() {
JFrame frame = new JFrame("Simple Frame");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setPreferredSize(new Dimension(480,200)); frame.pack(); frame.setVisible(true); }
public static void main(String[] args){
createAndShowGUI();
}
}
![Page 10: Swing low, sweet chariotwiki.juneday.se/mediawiki/images/a/a8/Java-concept_och_Swing.pdf · Ett klassbibiliotek som följer med Java Är designat med många OO-concept och -principer](https://reader033.vdocuments.net/reader033/viewer/2022052006/6019ecb87463a35a7b19d777/html5/thumbnails/10.jpg)
Stäng fönstret med x-knappenimport java.awt.*;import java.awt.event.*;import javax.swing.*; public class SimpleFrame { private static void createAndShowGUI() {
JFrame frame = new JFrame("Simple Frame");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setPreferredSize(new Dimension(480,200)); frame.pack(); frame.setVisible(true); }
public static void main(String[] args){
createAndShowGUI();
}
}
![Page 11: Swing low, sweet chariotwiki.juneday.se/mediawiki/images/a/a8/Java-concept_och_Swing.pdf · Ett klassbibiliotek som följer med Java Är designat med många OO-concept och -principer](https://reader033.vdocuments.net/reader033/viewer/2022052006/6019ecb87463a35a7b19d777/html5/thumbnails/11.jpg)
Fönstret har en storlekimport java.awt.*;import java.awt.event.*;import javax.swing.*; public class SimpleFrame { private static void createAndShowGUI() {
JFrame frame = new JFrame("Simple Frame");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setPreferredSize(new Dimension(480,200)); frame.pack(); frame.setVisible(true); }
public static void main(String[] args){
createAndShowGUI();
}
}
![Page 12: Swing low, sweet chariotwiki.juneday.se/mediawiki/images/a/a8/Java-concept_och_Swing.pdf · Ett klassbibiliotek som följer med Java Är designat med många OO-concept och -principer](https://reader033.vdocuments.net/reader033/viewer/2022052006/6019ecb87463a35a7b19d777/html5/thumbnails/12.jpg)
Packa ihop och visa fönstretimport java.awt.*;import java.awt.event.*;import javax.swing.*; public class SimpleFrame { private static void createAndShowGUI() {
JFrame frame = new JFrame("Simple Frame");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setPreferredSize(new Dimension(480,200)); frame.pack(); frame.setVisible(true); }
public static void main(String[] args){
createAndShowGUI();
}
}
![Page 13: Swing low, sweet chariotwiki.juneday.se/mediawiki/images/a/a8/Java-concept_och_Swing.pdf · Ett klassbibiliotek som följer med Java Är designat med många OO-concept och -principer](https://reader033.vdocuments.net/reader033/viewer/2022052006/6019ecb87463a35a7b19d777/html5/thumbnails/13.jpg)
Vi vill ha lite komponenter i fönstretJFrame frame = new JFrame("Frame with menu");frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);frame.setPreferredSize(new Dimension(480,200));
JMenuBar menuBar=new JMenuBar();frame.add(menuBar, BorderLayout.NORTH);JMenu menu = new JMenu("File");menuBar.add(menu);JMenuItem quit = new JMenuItem("Quit");menu.add(quit);quit.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ System.exit(0); }});//Display the window.frame.pack();frame.setVisible(true);
![Page 14: Swing low, sweet chariotwiki.juneday.se/mediawiki/images/a/a8/Java-concept_och_Swing.pdf · Ett klassbibiliotek som följer med Java Är designat med många OO-concept och -principer](https://reader033.vdocuments.net/reader033/viewer/2022052006/6019ecb87463a35a7b19d777/html5/thumbnails/14.jpg)
JMenuBar - Lägg den högst uppJFrame frame = new JFrame("Frame with menu");frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);frame.setPreferredSize(new Dimension(480,200));
JMenuBar menuBar=new JMenuBar();frame.add(menuBar, BorderLayout.NORTH);JMenu menu = new JMenu("File");menuBar.add(menu);JMenuItem quit = new JMenuItem("Quit");menu.add(quit);quit.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ System.exit(0); }});//Display the window.frame.pack();frame.setVisible(true);
![Page 15: Swing low, sweet chariotwiki.juneday.se/mediawiki/images/a/a8/Java-concept_och_Swing.pdf · Ett klassbibiliotek som följer med Java Är designat med många OO-concept och -principer](https://reader033.vdocuments.net/reader033/viewer/2022052006/6019ecb87463a35a7b19d777/html5/thumbnails/15.jpg)
JMenuJFrame frame = new JFrame("Frame with menu");frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);frame.setPreferredSize(new Dimension(480,200));
JMenuBar menuBar=new JMenuBar();frame.add(menuBar, BorderLayout.NORTH);JMenu menu = new JMenu("File");menuBar.add(menu);JMenuItem quit = new JMenuItem("Quit");menu.add(quit);quit.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ System.exit(0); }});//Display the window.frame.pack();frame.setVisible(true);
![Page 16: Swing low, sweet chariotwiki.juneday.se/mediawiki/images/a/a8/Java-concept_och_Swing.pdf · Ett klassbibiliotek som följer med Java Är designat med många OO-concept och -principer](https://reader033.vdocuments.net/reader033/viewer/2022052006/6019ecb87463a35a7b19d777/html5/thumbnails/16.jpg)
JMenuItemJFrame frame = new JFrame("Frame with menu");frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);frame.setPreferredSize(new Dimension(480,200));
JMenuBar menuBar=new JMenuBar();frame.add(menuBar, BorderLayout.NORTH);JMenu menu = new JMenu("File");menuBar.add(menu);JMenuItem quit = new JMenuItem("Quit");menu.add(quit);quit.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ System.exit(0); }});//Display the window.frame.pack();frame.setVisible(true);
![Page 17: Swing low, sweet chariotwiki.juneday.se/mediawiki/images/a/a8/Java-concept_och_Swing.pdf · Ett klassbibiliotek som följer med Java Är designat med många OO-concept och -principer](https://reader033.vdocuments.net/reader033/viewer/2022052006/6019ecb87463a35a7b19d777/html5/thumbnails/17.jpg)
Sammanfattning
Huvudfönster - JFrameJFrame är en container, i vilken vi läggerComponentsJMenuBar En menyradJMenu En menyJMenuItem Ett menyelement
![Page 18: Swing low, sweet chariotwiki.juneday.se/mediawiki/images/a/a8/Java-concept_och_Swing.pdf · Ett klassbibiliotek som följer med Java Är designat med många OO-concept och -principer](https://reader033.vdocuments.net/reader033/viewer/2022052006/6019ecb87463a35a7b19d777/html5/thumbnails/18.jpg)
Sammanfattning, forts...JFrame har en default layout manager som heter BorderLayout-------------------------------
| NORTH |
|------------------------------
| W| | E|
| E| | A|
| S| CENTER | S|
| T| | T|
|-----------------------------|
| SOUTH |
|_____________________________|
![Page 19: Swing low, sweet chariotwiki.juneday.se/mediawiki/images/a/a8/Java-concept_och_Swing.pdf · Ett klassbibiliotek som följer med Java Är designat med många OO-concept och -principer](https://reader033.vdocuments.net/reader033/viewer/2022052006/6019ecb87463a35a7b19d777/html5/thumbnails/19.jpg)
Java-concept och Swing 2
It Don't Mean a Thing If It Ain't Got That Swing
![Page 20: Swing low, sweet chariotwiki.juneday.se/mediawiki/images/a/a8/Java-concept_och_Swing.pdf · Ett klassbibiliotek som följer med Java Är designat med många OO-concept och -principer](https://reader033.vdocuments.net/reader033/viewer/2022052006/6019ecb87463a35a7b19d777/html5/thumbnails/20.jpg)
LayoutManagerJFrame har en default layout manager som heter BorderLayout-------------------------------
| NORTH |
|------------------------------
| W| | E|
| E| | A|
| S| CENTER | S|
| T| | T|
|-----------------------------|
| SOUTH |
|_____________________________|
![Page 21: Swing low, sweet chariotwiki.juneday.se/mediawiki/images/a/a8/Java-concept_och_Swing.pdf · Ett klassbibiliotek som följer med Java Är designat med många OO-concept och -principer](https://reader033.vdocuments.net/reader033/viewer/2022052006/6019ecb87463a35a7b19d777/html5/thumbnails/21.jpg)
BorderLayout
I NORTH och SOUTH tar komponenter maximal bredd men behåller sin föredragna höjd.I WEST och EAST tar komponenter maximal höjd men behåller sin föredragna bredd.
I CENTER växer komponenter på alla bredder
![Page 22: Swing low, sweet chariotwiki.juneday.se/mediawiki/images/a/a8/Java-concept_och_Swing.pdf · Ett klassbibiliotek som följer med Java Är designat med många OO-concept och -principer](https://reader033.vdocuments.net/reader033/viewer/2022052006/6019ecb87463a35a7b19d777/html5/thumbnails/22.jpg)
BorderLayout - example
![Page 23: Swing low, sweet chariotwiki.juneday.se/mediawiki/images/a/a8/Java-concept_och_Swing.pdf · Ett klassbibiliotek som följer med Java Är designat med många OO-concept och -principer](https://reader033.vdocuments.net/reader033/viewer/2022052006/6019ecb87463a35a7b19d777/html5/thumbnails/23.jpg)
FlowLayout
Vi kan ändra layout för en frame:frame.setLayout(new FlowLayout());FlowLayout lägger ut komponenter i rad i den ordning vi anger. Från höger till vänster och om de inte får plats på en rad, så fortsätter man på en ny rad, centrerat.
![Page 24: Swing low, sweet chariotwiki.juneday.se/mediawiki/images/a/a8/Java-concept_och_Swing.pdf · Ett klassbibiliotek som följer med Java Är designat med många OO-concept och -principer](https://reader033.vdocuments.net/reader033/viewer/2022052006/6019ecb87463a35a7b19d777/html5/thumbnails/24.jpg)
FlowLayout - exempel
Komponenterna behåller sin föredragna storlek.
![Page 25: Swing low, sweet chariotwiki.juneday.se/mediawiki/images/a/a8/Java-concept_och_Swing.pdf · Ett klassbibiliotek som följer med Java Är designat med många OO-concept och -principer](https://reader033.vdocuments.net/reader033/viewer/2022052006/6019ecb87463a35a7b19d777/html5/thumbnails/25.jpg)
GridLayout - ett rutnät
Komponenter placeras ut i ordning, vänster till höger enligt kolumner och rader.Komponenter växer åt alla håll om fönstret förstoras.
![Page 26: Swing low, sweet chariotwiki.juneday.se/mediawiki/images/a/a8/Java-concept_och_Swing.pdf · Ett klassbibiliotek som följer med Java Är designat med många OO-concept och -principer](https://reader033.vdocuments.net/reader033/viewer/2022052006/6019ecb87463a35a7b19d777/html5/thumbnails/26.jpg)
Kombinera olika layouter
Ofta vill man ha lite olika layout på olika delar.
Paneler är här användbara. En panel är bara en yta som kan innehålla komponenter.
Panelen kan ha en annan layout än fönstret.
![Page 27: Swing low, sweet chariotwiki.juneday.se/mediawiki/images/a/a8/Java-concept_och_Swing.pdf · Ett klassbibiliotek som följer med Java Är designat med många OO-concept och -principer](https://reader033.vdocuments.net/reader033/viewer/2022052006/6019ecb87463a35a7b19d777/html5/thumbnails/27.jpg)
Exempel - miniräknare
Idé: Fönstret har BorderLayout och vi lägger displayen i NORTH.
Vi lägger knapparna i CENTER.
Ingen logik, bara exempel på layout här!
![Page 28: Swing low, sweet chariotwiki.juneday.se/mediawiki/images/a/a8/Java-concept_och_Swing.pdf · Ett klassbibiliotek som följer med Java Är designat med många OO-concept och -principer](https://reader033.vdocuments.net/reader033/viewer/2022052006/6019ecb87463a35a7b19d777/html5/thumbnails/28.jpg)
Calculator - example
![Page 29: Swing low, sweet chariotwiki.juneday.se/mediawiki/images/a/a8/Java-concept_och_Swing.pdf · Ett klassbibiliotek som följer med Java Är designat med många OO-concept och -principer](https://reader033.vdocuments.net/reader033/viewer/2022052006/6019ecb87463a35a7b19d777/html5/thumbnails/29.jpg)
Kodsnuttar från CalculatorJFrame frame = new JFrame("Pocket calculator");JTextField display = new JTextField(20);JPanel buttons=new JPanel();buttons.setLayout(new GridLayout(0,4)); // 4 cols, as many rows as needed
JButton button9 = new JButton("9"); // and so on...
buttons.add(button7);buttons.add(button8);buttons.add(button9);buttons.add(buttonDiv); // First row!
// and so on
frame.add(display, BorderLayout.NORTH);frame.add(buttons, BorderLayout.CENTER);
![Page 30: Swing low, sweet chariotwiki.juneday.se/mediawiki/images/a/a8/Java-concept_och_Swing.pdf · Ett klassbibiliotek som följer med Java Är designat med många OO-concept och -principer](https://reader033.vdocuments.net/reader033/viewer/2022052006/6019ecb87463a35a7b19d777/html5/thumbnails/30.jpg)
Sammanfattning
BorderLayout - Smala ytor i N,W,S,E, bred yta i CENTERFlowLayout - Allt i en rad, fyller på mer fler rader centreratGridLayout - kolumner och raderLayouter går att kombinera, t ex med paneler
![Page 31: Swing low, sweet chariotwiki.juneday.se/mediawiki/images/a/a8/Java-concept_och_Swing.pdf · Ett klassbibiliotek som följer med Java Är designat med många OO-concept och -principer](https://reader033.vdocuments.net/reader033/viewer/2022052006/6019ecb87463a35a7b19d777/html5/thumbnails/31.jpg)
Sammanfattning komponenter
Vi har sett:JButton - en knappPanel - en tom yta att lägga andra komponenter iJTextField - ett textinmatningsfält(Första filmen såg vi också menyrader, menyer och menyelement i)
![Page 32: Swing low, sweet chariotwiki.juneday.se/mediawiki/images/a/a8/Java-concept_och_Swing.pdf · Ett klassbibiliotek som följer med Java Är designat med många OO-concept och -principer](https://reader033.vdocuments.net/reader033/viewer/2022052006/6019ecb87463a35a7b19d777/html5/thumbnails/32.jpg)
Java-concept och Swing 3
Papa’s got a brand new bag GridBagLayout
![Page 33: Swing low, sweet chariotwiki.juneday.se/mediawiki/images/a/a8/Java-concept_och_Swing.pdf · Ett klassbibiliotek som följer med Java Är designat med många OO-concept och -principer](https://reader033.vdocuments.net/reader033/viewer/2022052006/6019ecb87463a35a7b19d777/html5/thumbnails/33.jpg)
En lite krångligare/kraftfullare layout
GridBagLayout är betydligt kraftfullare än de vi sett hittills. Kraftfull betyder dock ofta krångligare att använda...
![Page 34: Swing low, sweet chariotwiki.juneday.se/mediawiki/images/a/a8/Java-concept_och_Swing.pdf · Ett klassbibiliotek som följer med Java Är designat med många OO-concept och -principer](https://reader033.vdocuments.net/reader033/viewer/2022052006/6019ecb87463a35a7b19d777/html5/thumbnails/34.jpg)
GridBagLayout - have it your way
Man specificerar precis hur komponenter ska placeras ut och var:gridx, gridy - vilken cell? 0,0 är högst upp, tvgridwidth, gridheight - hur stor plats?fill - om komponenten skalas om, hur göra?(det finns mer men ovanstående är basic ;-) )
![Page 35: Swing low, sweet chariotwiki.juneday.se/mediawiki/images/a/a8/Java-concept_och_Swing.pdf · Ett klassbibiliotek som följer med Java Är designat med många OO-concept och -principer](https://reader033.vdocuments.net/reader033/viewer/2022052006/6019ecb87463a35a7b19d777/html5/thumbnails/35.jpg)
GridBagLayout - en snyggare calc!
Vi försöker härma den här:Display: 2 rader, 6 kolumner
“=” ska vara två knappar bred
![Page 36: Swing low, sweet chariotwiki.juneday.se/mediawiki/images/a/a8/Java-concept_och_Swing.pdf · Ett klassbibiliotek som följer med Java Är designat med många OO-concept och -principer](https://reader033.vdocuments.net/reader033/viewer/2022052006/6019ecb87463a35a7b19d777/html5/thumbnails/36.jpg)
Calc copycat
![Page 37: Swing low, sweet chariotwiki.juneday.se/mediawiki/images/a/a8/Java-concept_och_Swing.pdf · Ett klassbibiliotek som följer med Java Är designat med många OO-concept och -principer](https://reader033.vdocuments.net/reader033/viewer/2022052006/6019ecb87463a35a7b19d777/html5/thumbnails/37.jpg)
Calculator - kodfragment// En JFrame har en ContentPane som är en Container
Container pane = frame.getContentPane();pane.setLayout(new GridBagLayout());
// Skapa ett constraints-object
GridBagConstraints c = new GridBagConstraints();
// Sätt egenskaper för c:
c.weightx=1; c.weighty=1;c.gridwidth = 6; c.gridheight = 2;c.gridx = 0; c.gridy = 0;
JTextPane display = new JTextPane();pane.add(display, c); // add i klassen Container
![Page 38: Swing low, sweet chariotwiki.juneday.se/mediawiki/images/a/a8/Java-concept_och_Swing.pdf · Ett klassbibiliotek som följer med Java Är designat med många OO-concept och -principer](https://reader033.vdocuments.net/reader033/viewer/2022052006/6019ecb87463a35a7b19d777/html5/thumbnails/38.jpg)
Metoden add i Container
public void add(Component comp, Object constraints)Adds the specified component to the end of this container. Also notifies the layout manager to add the component to this container's layout using the specified constraints object.
![Page 39: Swing low, sweet chariotwiki.juneday.se/mediawiki/images/a/a8/Java-concept_och_Swing.pdf · Ett klassbibiliotek som följer med Java Är designat med många OO-concept och -principer](https://reader033.vdocuments.net/reader033/viewer/2022052006/6019ecb87463a35a7b19d777/html5/thumbnails/39.jpg)
JButton button7 = new JButton(" 7 ");c.gridx = 0; c.gridy = 3;pane.add(button7, c);JButton button8 = new JButton(" 8 ");c.gridx = 1; c.gridy = 3;pane.add(button8, c);JButton button9 = new JButton(" 9 ");c.gridx = 2; c.gridy = 3;pane.add(button9, c);JButton buttonDiv = new JButton(" / ");c.gridx = 3; c.gridy = 3;pane.add(buttonDiv, c);JButton buttonClear = new JButton(" C ");c.gridx = 4; c.gridy = 3;pane.add(buttonClear, c);JButton buttonDel = new JButton(" <x");c.gridx = 5; c.gridy = 3;pane.add(buttonDel, c);
Knapparna i första raden
![Page 40: Swing low, sweet chariotwiki.juneday.se/mediawiki/images/a/a8/Java-concept_och_Swing.pdf · Ett klassbibiliotek som följer med Java Är designat med många OO-concept och -principer](https://reader033.vdocuments.net/reader033/viewer/2022052006/6019ecb87463a35a7b19d777/html5/thumbnails/40.jpg)
Likamedknappen är bredareJButton buttonEquals = new JButton(" = ");c.gridwidth = 2; // Två knappar bredc.gridheight = 1;c.gridx = 4;c.gridy = 6;pane.add(buttonEquals, c);
![Page 41: Swing low, sweet chariotwiki.juneday.se/mediawiki/images/a/a8/Java-concept_och_Swing.pdf · Ett klassbibiliotek som följer med Java Är designat med många OO-concept och -principer](https://reader033.vdocuments.net/reader033/viewer/2022052006/6019ecb87463a35a7b19d777/html5/thumbnails/41.jpg)
Java-concept och Swing 4
Refactoring
![Page 42: Swing low, sweet chariotwiki.juneday.se/mediawiki/images/a/a8/Java-concept_och_Swing.pdf · Ett klassbibiliotek som följer med Java Är designat med många OO-concept och -principer](https://reader033.vdocuments.net/reader033/viewer/2022052006/6019ecb87463a35a7b19d777/html5/thumbnails/42.jpg)
Upprepning av liknande kod// " sym " [ x ] [ y ] pane.add
JButton button7 = new JButton(" 7 ");
c.gridx = 0; c.gridy = 3; pane.add(button7, c);
JButton button8 = new JButton(" 8 "); c.gridx = 1; c.gridy = 3;
pane.add(button8, c);
JButton button9 = new JButton(" 9 ");
c.gridx = 2; c.gridy = 3; pane.add(button9, c);
JButton buttonDiv = new JButton(" / ");
c.gridx = 3; c.gridy = 3; pane.add(buttonDiv, c);
JButton buttonClear = new JButton(" C ");
c.gridx = 4; c.gridy = 3; pane.add(buttonClear, c);
JButton buttonDel = new JButton(" <x");
c.gridx = 5; c.gridy = 3; pane.add(buttonDel, c);
// OSV (detta vara bara första raden med 6 knappar...)
![Page 43: Swing low, sweet chariotwiki.juneday.se/mediawiki/images/a/a8/Java-concept_och_Swing.pdf · Ett klassbibiliotek som följer med Java Är designat med många OO-concept och -principer](https://reader033.vdocuments.net/reader033/viewer/2022052006/6019ecb87463a35a7b19d777/html5/thumbnails/43.jpg)
Refactoring - lyft ut upprepningprivate static GridBagConstraints c
= new GridBagConstraints();
private static JFrame frame
= new JFrame("Pocket calculator");
private static void addButton(String sym, int x, int y){
Container pane = frame.getContentPane(); c.gridx = x; c.gridy = y; pane.add(new JButton(sym), c);
}
![Page 44: Swing low, sweet chariotwiki.juneday.se/mediawiki/images/a/a8/Java-concept_och_Swing.pdf · Ett klassbibiliotek som följer med Java Är designat med många OO-concept och -principer](https://reader033.vdocuments.net/reader033/viewer/2022052006/6019ecb87463a35a7b19d777/html5/thumbnails/44.jpg)
Vinsten? Mer kompakt kod// First row:
addButton(" 7 ",0,3); addButton(" 8 ",1,3); addButton(" 9 ",2,3); addButton(" / ",3,3); addButton(" C ",4,3); addButton(" <x",5,3);// Second row:addButton(" 4 ",0,4); addButton(" 5 ",1,4); addButton(" 6 ",2,4); addButton(" * ",3,4); addButton(" ( ",4,4); addButton(" ) ",5,4);// Third row:addButton(" 1 ",0,5); addButton(" 2 ",1,5); addButton(" 3 ",2,5); addButton(" - ",3,5); addButton(" x²",4,5); addButton("sqrt",5,5);// Last row:addButton(" 0 ",0,6); addButton(" , ",1,6); addButton(" % ",2,6); addButton(" + ",3,6);
JButton buttonEquals = new JButton(" = "); // = är speciell...c.gridwidth = 2; c.gridheight = 1; // vi kör gamla sättetc.gridx = 4; c.gridy = 6;pane.add(buttonEquals, c);
// Jämför med tidigare kod för bara första raden!
![Page 45: Swing low, sweet chariotwiki.juneday.se/mediawiki/images/a/a8/Java-concept_och_Swing.pdf · Ett klassbibiliotek som följer med Java Är designat med många OO-concept och -principer](https://reader033.vdocuments.net/reader033/viewer/2022052006/6019ecb87463a35a7b19d777/html5/thumbnails/45.jpg)
Java-concept och Swing 5
Listen and take action
![Page 46: Swing low, sweet chariotwiki.juneday.se/mediawiki/images/a/a8/Java-concept_och_Swing.pdf · Ett klassbibiliotek som följer med Java Är designat med många OO-concept och -principer](https://reader033.vdocuments.net/reader033/viewer/2022052006/6019ecb87463a35a7b19d777/html5/thumbnails/46.jpg)
Registrera en lyssnare på en knapp// ActionListener är ett interface med blott en metod
// Vi använder en anonym inre klass för att registrera en lyssnare:
b.addActionListener(
// Anonym implementation av interfacet ActionListener
new ActionListener(){ public void actionPerformed(ActionEvent e){ display.setText(e.getActionCommand()); }
});
![Page 47: Swing low, sweet chariotwiki.juneday.se/mediawiki/images/a/a8/Java-concept_och_Swing.pdf · Ett klassbibiliotek som följer med Java Är designat med många OO-concept och -principer](https://reader033.vdocuments.net/reader033/viewer/2022052006/6019ecb87463a35a7b19d777/html5/thumbnails/47.jpg)
Registrera en lyssnare på en knapp// ActionListener är ett interface med blott en metod
// Vi använder en anonym inre klass för att registrera en lyssnare:
b.addActionListener(
// Anonym implementation av interfacet ActionListener
new ActionListener(){ public void actionPerformed(ActionEvent e){ display.setText(e.getActionCommand()); }
});
// Ett ActionEvent från en JButton har knappens text som “actionCommand()”