- Swingissä on kolme top level container -luokkaa, JFrame, JDialog ja JApplet. Jokaisella niistä on content pane, joka sisältää ruudulla näkyvät käyttöliittymäkomponentit, esim. napit tai pudotuslistat. Top level container voi sisältää myös päävalikon, joskin se liitetään yleensä vain JFrame-luokkaan.
- Varsinaisia näytölle liitettäviä komponentteja kuten nappeja, tekstikenttää, radiobuttoneita, jne. on runsas valikoima. Kaikkien niiden yliluokkana toimii JComponent-luokka. Kaikki komponentit perivät JComponent-luokalta myös tietyn perustoiminnallisuuden kuten enabled/disabled -toiminnallisuuden, eli setEnabled() metodilla on mahdollista aktivoida ja deaktivoida haluttu komponentti.
- Esim. JButton-komponentin luokkahierarkia:
java.lang.Object -> java.awt.Component -> java.awt.Container -> javax.swing.JComponent -> javax.swing.AbstractButton -> javax.swing.JButtonJFrame:
java.lang.Object -> java.awt.Component -> java.awt.Container -> java.awt.Window -> java.awt.Frame -> javax.swing.JFrameJPanel:
java.lang.Object -> java.awt.Component -> java.awt.Container -> javax.swing.JComponent -> javax.swing.JPanel4-1: Vertaile AWT:tä ja Swingiä. Millaisia eroja ja yhtäläisyyksiä niillä on? Millainen historia niillä on? Miksi?
AWT (Abstract Windows Toolkit) on alkuperäinen Javan kirjasto graafisen käyttöliittymän komponenteille. AWT:n komponentit mäppäytyvät automaattisesti kulloinkin käytettävän käyttöjärjestelmän graafisen käyttöliittymän komponentteihin. AWT sopii yksinkertaisten GUI-sovellusten ja applettien toteuttamiseen, mutta isompiin projekteihin kannattaa käyttää Javan 2-versiossa esiteltyä Swingiä. Swing-komponentit piirretään näytölle Java-koodin avulla lukuunottamatta komponentteja, jotka ovat java.awt.window tai java.awt.Panel -luokkien aliluokkia. Tuki AWT:lle saattaa kuitenkin loppua tulevissa Java-versioissa. 4-2: Tee graafinen sovellus, joka esittelee käyttöliittymäkomponentteja JButton, JLabel, JRadioButton, JSlider, JTextArea ja JTextField, ym. Esittelyn ei tarvitse olla mitenkään dynaaminen. Kokeile erilaisia ulkoasuja: Motif, Metal, (Windows).
import java.awt.*; import java.awt.event.*; import javax.swing.*; public class SwingTest extends JFrame implements ActionListener { private final int MINVAL = 0; private final int MAXVAL = 30; private final int INITVAL = 15; private JPanel panel = new JPanel(new BorderLayout()); private JMenuBar menubar = new JMenuBar(); private JMenu menu = new JMenu("File"); private JMenuItem menuitem = new JMenuItem("Exit");; private JButton button = new JButton("Clear"); private JLabel label = new JLabel("This is a label"); private JRadioButton radiobutton = new JRadioButton("This is a radiobutton"); private JSlider slider = new JSlider(JSlider.HORIZONTAL, MINVAL, MAXVAL, INITVAL); private JTextArea textarea = new JTextArea("This is textarea", 5, 20); private JTextField textfield = new JTextField(); public SwingTest () { // close the window from windowmanager //addWindowListener(new WindowAdapter() { // public void windowClosing(WindowEvent e) { // System.exit(0); // } //}); Container contentPane = getContentPane(); JPanel myPane = new JPanel(); myPane.setLayout(new BoxLayout(myPane, BoxLayout.PAGE_AXIS)); // set main window and menu this.setJMenuBar(menubar); menu.add(menuitem); menubar.add(menu); // set components slider.setMajorTickSpacing(10); slider.setMinorTickSpacing(1); slider.setPaintTicks(true); slider.setPaintLabels(true); slider.setPreferredSize(new Dimension(200,100)); button.setPreferredSize(new Dimension(100,40)); panel.setPreferredSize(new Dimension(200,100)); textfield.setPreferredSize(new Dimension(100,20)); // add listeners menuitem.addActionListener(this); button.addActionListener(this); // add components myPane.add(button); myPane.add(label); myPane.add(radiobutton); myPane.add(slider); myPane.add(textarea); myPane.add(textfield); contentPane.add(myPane); } public void actionPerformed(ActionEvent e) { if (e.getSource() == menuitem) { System.exit(0); } if (e.getSource() == button) { textarea.setText(""); } } public static void main(String[] args) { SwingTest window = new SwingTest(); window.setSize(640, 480); window.setTitle("Swing Test"); try { //UIManager.setLookAndFeel("com.sun.java.swing.plaf.gtk.GTKLookAndFeel"); //UIManager.setLookAndFeel("javax.swing.plaf.metal.MetalLookAndFeel"); UIManager.setLookAndFeel(UIManager.getCrossPlatformLookAndFeelClassName()); } catch (Exception e) { e.printStackTrace(); } window.pack(); window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); window.setVisible(true); } }4-3: Tee graafinen sovellus, joka esittelee graafisia hahmoja, kirjasintyyppejä ja värejä. Esittelyn ei tarvitse olla mitenkään dynaaminen. Riittää kun ruudulla näkyy viivoja, käppyröitä, yms. Kannattanee käyttää luokan java.awt.Graphics2D palveluita?import javax.swing.*; import java.awt.*; public class Pic extends JFrame { public Pic() { Container container = getContentPane(); container.setLayout(new GridLayout(2,2,0,0)); //Jaetaan ikkuna neljään osaan GridLayoutin mukaisesti JPanel p1 = new JPanel(new GridLayout(2,2,0,0)); //Luodaan neljä JPanel-oliota joille annetaan neljään osaan JPanel p2 = new JPanel(new GridLayout(2,2,0,0)); //jaettu GridLayout JPanel p3 = new JPanel(new GridLayout(2,2,0,0)); JPanel p4 = new JPanel(new GridLayout(2,2,0,0)); p1.add(new RectEmpty()); //Piirretään tyhjä suorakaide p1.add(new RectFilled()); //Piirretään täytetty suorakaide p1.add(new Rect3D()); //Piirretään upotettu suuorakaide p1.add(new Rect3DRaised()); //Piirretään kohotettu suorakaide p2.add(new RectRoundEmpty()); //Piirretään tyhjä suorakaide jossa on pyöristetyt kulmat p2.add(new RectRoundFilled()); //Piirretään täytetty suorakaide jossa on pyöristetyt kulmat p2.add(new OvalEmpty()); //Piirretään soikio/ympyrä p2.add(new OvalFilled()); //Piirretää täytetty soikio/pallo p3.add(new ArcEmpty()); //Piirretään kaari p3.add(new ArcFilled()); //Piirretään kaari täytöllä p3.add(new DrawLine()); //Piirretään viiva p3.add(new DrawMultipleLine()); //Piirretään enemmänkin viivoja p4.add(new RectEmpty()); p4.add(new RectFilled()); p4.add(new Rect3D()); p4.add(new Rect3DRaised()); //Lisätään paneelit ikkunan layoutiin container.add(p1); container.add(p2); container.add(p3); container.add(p4); } public static void main(String[] args) { Pic gui = new Pic(); //Luodaan graafinen käyttöliittymä gui.setSize(450, 450); //Asetetaan ikkunan kooksi 450 x 450 Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize(); //Selvitetään ruudun koko int screenWidth = screenSize.width; //Ruudun leveys int screenHeight = screenSize.height; //Ruudun korkeus Dimension frameSize = gui.getSize(); int x = (screenWidth - frameSize.width)/2; //Lasketaan ikkunan vasemman yläkulman sijainti. int y = (screenHeight - frameSize.height)/2; gui.setTitle("Ikkunan nimi"); //Annetaan ikkunalle nimi gui.setLocation(x, y); //Asetetaan ikkuna keskelle ruutua gui.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //Ikkunan sulkemisoperaatio gui.setVisible(true); //Asetetaan ikkuna näkyväksi } } class RectEmpty extends JPanel { //Luodaan tyhjä suorakaide public void paintComponent(Graphics g) { super.paintComponent(g); //Korvataan yliluokan metodi paintComponent() g.setColor(Color.red); //Asetataan suorakaiteen väriksi punainen g.drawRect(0, 0, 100, 100); //Luodaan suorakaide jonka koko on 100 x 100 } public Dimension getPreferredSize() { return new Dimension(100, 100); //Asetetaan RectEmpty-olio vaatimaan tilaa 100 x 100 pikseliä } } class RectFilled extends JPanel { //Luodaan väritetty suorakaide public void paintComponent(Graphics g) { super.paintComponent(g); //Korvataan yliluokan metodi paintComponent() g.setColor(Color.green); //Asetetaan suorakaiteen väriksi vihreä g.fillRect(0, 0, 100, 100); //Luodaan 100 x 100 kokoinen täytetty suorakaide } public Dimension getPreferredSize() { return new Dimension(100, 100); //Annetaan RectFilled-oliolle tilaa 100 x 100 pikseliä } } class Rect3D extends JPanel { //Luodaan upotettu kolmiuloitteinen suorakaide public void paintComponent(Graphics g) { super.paintComponent(g); //Korvataan yliluokan metodi paintComponent() g.setColor(Color.cyan); //Asetetaan suorakaiteen väriksi cyan g.fill3DRect(0, 0, 100, 100, false); //Luodaan 100 x 100 kokoinen täytetty suorakaide, joka on upotettu } public Dimension getPreferredSize() { return new Dimension(100, 100); //Annetaan Rect3D-oliolle tilaa 100 x 100 pikseliä } } class Rect3DRaised extends JPanel { //Luodaan kohotettu kolmiuloitteinen suorakaide public void paintComponent(Graphics g) { super.paintComponent(g); //Korvataan yliluokan metodi paintComponent() g.setColor(Color.cyan); //Asetetaan suorakaiteen väriksi cyan g.fill3DRect(0, 0, 100, 100, true); //Luodaan 100 x 100 kokoinen täytetty suorakaide, joka on kohotettu } public Dimension getPreferredSize() { return new Dimension(100, 100); //Annetaan Rect3DRaised-oliolle tilaa 100 x 100 pikseliä } } class RectRoundEmpty extends JPanel { //Luodaan tyhjä suorakaide jossa on pyöristetyt kulmat public void paintComponent(Graphics g) { super.paintComponent(g); //Korvataan yliluokan metodi paintComponent() g.setColor(Color.red); //Asetetaan suorakaiteen väriksi punainen g.drawRoundRect(0,0,100,100,20,20); //Luodaan 100 x 100 kokoinen suorakaide, pyöristyksiin käytetään tilaa 20 x 20 pikseliä } public Dimension getPreferredSize() { return new Dimension(100, 100); //Annetaan suorakaiteelle tilaa 100 x 100 pikseliä } } class RectRoundFilled extends JPanel { //Luodaan täytetty suorakaide jossa on pyöristetyt kulmat public void paintComponent(Graphics g) { super.paintComponent(g); //Korvataan yliluokan metodi paintComponent() g.setColor(Color.green); //Asetetaan suorakaiteen väriksi vihreä g.fillRoundRect(0, 0, 100, 100, 20, 20); //Luodaan 100 x 100 kokoinen suorakaide, pyöristyksiin käytetään tilaa 20 x 20 pikseliä } public Dimension getPreferredSize() { return new Dimension(100, 100); //Annetaan suorakaiteelle tilaa 100 x 100 pikseliä } } class OvalEmpty extends JPanel { //Luodaan tyhjä soikio public void paintComponent(Graphics g) { super.paintComponent(g); //Korvataan yliluokan metodi paintComponent() g.setColor(Color.cyan); //Asetetaan väriksi cyan g.drawOval(0, 0, 100, 100); //Määritetään korkeus 100 ja leveys 100 pikseliä } public Dimension getPreferredSize() { return new Dimension(100, 100); //Annetaan piirrokselle tila 100 x 100 pikseliä } } class ArcFilled extends JPanel { //Piirretään täytetty kaari public void paintComponent(Graphics g) { super.paintComponent(g); //Korvataan yliluokan metodi paintComponent() g.setColor(Color.cyan); //Asetetaan väriksi cyan g.fillArc(0, 0, 100, 100, 90, 110); //Määritetään korkeus 100 ja leveys 100 pikseliä } public Dimension getPreferredSize() { return new Dimension(100, 100); //Annetaan piirrokselle tila 100 x 100 pikseliä } } class ArcEmpty extends JPanel { //Luodaan tyhjä kaari public void paintComponent(Graphics g) { super.paintComponent(g); //Korvataan yliluokan metodi paintComponent() g.setColor(Color.black); //Asetetaan väriksi musta g.drawArc(0, 0, 100, 100, 270, 180); //Määritetään korkeus 100 ja leveys 100 pikseliä } public Dimension getPreferredSize() { return new Dimension(100, 100); //Annetaan piirrokselle tila 100 x 100 pikseliä } } class DrawLine extends JPanel { //Luodaan viiva public void paintComponent(Graphics g) { super.paintComponent(g); //Korvataan yliluokan metodi paintComponent() g.setColor(Color.black); //Asetetaan väriksi musta g.drawLine(3, 4, 95, 90); } public Dimension getPreferredSize() { return new Dimension(100, 100); //Annetaan piirrokselle tila 100 x 100 pikseliä } } class DrawMultipleLine extends JPanel { //Luodaan useita viivoja public void paintComponent(Graphics g) { super.paintComponent(g); //Korvataan yliluokan metodi paintComponent() g.setColor(Color.black); //Asetetaan väriksi musta g.drawLine(0, 0, 100, 90); g.drawLine(0, 20, 95, 100); g.drawLine(13, 14, 85, 90); g.drawLine(56, 4, 0, 15); g.drawLine(0, 90, 100, 9); } public Dimension getPreferredSize() { return new Dimension(100, 100); //Annetaan piirrokselle tila 100 x 100 pikseliä } } 4-b: Esittele lyhyesti esimerkkien avulla kuvioiden piirtelyn ja tekstien kirjoittamisen perusideoita (viivoja, ympyröitä, yms., tekstejä, erilaisia tekstityyppejä, jne.; tässä tehtävässä ei ole tarkoitus esitellä, miten esim. valmiita jpg-kuvia näytetään). Anna yksinkertaisia mutta valaisevia ja toimivia ohjelmaesimerkkejä. Toiko Javan versio 1.5 joitakin muutoksia näihin asioihin?import javax.swing.*; import java.awt.*; public class Components extends JFrame { public Components() { Container container = getContentPane(); container.setLayout(new GridLayout(4,4,4,4)); //Jaetaan ikkuna 16 osaan GridLayoutin mukaisesti this.setJMenuBar(luoMenu()); //Kutsutaan metodia joka luo valikon container.add(new JButton("OK")); //Lisätään painonappi container.add(new JToggleButton("On/Off")); //Lisätään pohjaan jäävä painonappi container.add(new JTextField("JTextField")); //Lisätään tekstikenttä container.add(new JPasswordField("JPasswordField")); //Lisätään salasanakenttä container.add(new JTextArea("JTextArea")); //Lisätään alue johon voi kirjoittaa tekstiä container.add(new JLabel("JLabel")); //Lisätään "otsikko" container.add(skrollattavaLista()); //Kutsutaan metodia, joka luo skrollattavan listan container.add(luoSlider('x', 0, 50, 10)); //Kutsutaan metodia, joka tekee horisontaalisen liukupalkin container.add(luoSlider('y', 0, 20, 0)); //Kutsutaan metodia, joka tekee vertikaalisen liukupalkin container.add(luoComboBox()); //Kutsutaan metodia, joka luo ns. drop-down listan container.add(luoJPanel()); //Kutsutaan metodia, joka luo paneeleja } public static void main(String[] args) { //Päämetodi Components comp = new Components(); //Luodaan ilmentymä itsestä comp.pack(); //Annetaan ikkunalle järkevä koko comp.setVisible(true); //Tehdään ikkuna näkyväksi comp.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //Lopetetaan ohjelma kun ikkuna suljetaan } public JPanel luoJPanel() { //Luodaan paneeleja JPanel p1 = new JPanel(); JPanel p2 = new JPanel(); JPanel p3 = new JPanel(); JPanel p4 = new JPanel(); JPanel p5 = new JPanel(); p1.setLayout(new BorderLayout()); //Asetataan paneelille 1 BorderLayout p1.add(p2, BorderLayout.NORTH); //Sijoitetaan paneeli 2 paneelin yksi sisään ylimmäksi p1.add(p3, BorderLayout.CENTER); //Sijoitetaan paneeli 3 paneelin 1 sisään edellisen alapuolelle p2.setLayout(new BorderLayout()); //Asetataan paneelille 2 BorderLayout p2.add(p4, BorderLayout.EAST); //Asetetaan paneeli 4 paneeliin 2 vasemmalle puolelle p2.add(p5, BorderLayout.CENTER); //Asetetaan paneeli 5 paneeliin 2 edellisen oikealle puolelle p3.add(skrollattavaLista()); //Asetetaan paneeliin 3 skrollattava lista p3.setBackground(Color.blue); //Paneelin 3 taustaväri on sininen p4.add(luoComboBox()); //Paneeliin 4 luodaan drop-down lista p4.setBackground(Color.green); //Taustaväri on vihreä p5.add(new JLabel("JLabel")); //Paneeliin viisi sijoitetaan otsikko p5.setBackground(Color.yellow); //Taustaväriksi keltainen return p1; } public JComboBox luoComboBox() { //Luodaan drop-down lista alla olevista vaihtoehdoista String[] lista = {"Combo Box lista", "valinta 2", "valinta 3", "valinta 4", "valinta 5", "valinta 6", "valinta 7", "valinta 8"}; JComboBox comboBox = new JComboBox(lista); comboBox.setSelectedIndex(0); return comboBox; //Palautetaan luotu drop-down lista } public JSlider luoSlider(char x, int min, int max, int init) { //Luodaan liukupalkki JSlider slider; if (x == 'x') { slider = new JSlider(JSlider.HORIZONTAL, min, max, init); //Vaakatasoon } else { slider = new JSlider(JSlider.VERTICAL, min, max, init); //Pystytasoon } slider.setMajorTickSpacing(10); //Asetetaan väliarvot 10 yksikön välein slider.setMinorTickSpacing(1); //Asetetaan pienet väliarvot 1 yksikön välein slider.setPaintTicks(true); slider.setPaintLabels(true); return slider; //Palautetaan liukupalkki } public JMenuBar luoMenu() { //Luodaan valikko JMenuBar menuBar = new JMenuBar(); JMenu menu = new JMenu("JMenu menu"); JMenu submenu = new JMenu("JMenu submenu"); JMenu anotherSubmenu = new JMenu("JMenu anotherSubmenu"); JMenuItem item1 = new JMenuItem("JMenuItem item1"); JCheckBoxMenuItem item2 = new JCheckBoxMenuItem("JCheckBoxMenuItem item2"); //Luodaan valikko checkbox-valinnalla JCheckBoxMenuItem item3 = new JCheckBoxMenuItem("JCheckBoxMenuItem item3"); item3.setSelected(true); ButtonGroup group = new ButtonGroup(); JRadioButtonMenuItem item4 = new JRadioButtonMenuItem("JRadioButtonMenuItem item4"); //Luodaan valikko radiobutton-valinnalla JRadioButtonMenuItem item5 = new JRadioButtonMenuItem("JRadioButtonMenuItem item5"); JRadioButtonMenuItem item6 = new JRadioButtonMenuItem("JRadioButtonMenuItem item6"); item4.setSelected(true); group.add(item4); group.add(item5); group.add(item6); menuBar.add(menu); //Lisätään valikko yläpalkkiin menu.add(item1); //Lisätään valinta valikkoon menu.add(submenu); //Lisätään alavalikko submenu.add(item2); //Alavalikkoon checkbox-valinta submenu.add(item3); menu.add(anotherSubmenu); //Lisätään toinen alavalikko anotherSubmenu.add(item4); //Lisätään alavalikkoon radiobutton-valinta anotherSubmenu.add(item5); anotherSubmenu.add(item6); return menuBar; //Palautetaan luotu valikko } public JScrollPane skrollattavaLista() { //Luodaan skrollattava paneeli DefaultListModel listModel = new DefaultListModel(); for (int i = 1; i < 20; i++) //Asetetaan valikkoon 19 valintaa listModel.addElement("Valinta "+i); JList list = new JList(listModel); //Luodaan lista list.setSelectionMode(ListSelectionModel.SINGLE_INTERVAL_SELECTION); //Sallitaan vain yksi aktiivinen valinta list.setVisibleRowCount(-1); list.setSelectedIndex(4); //Neljäs valinta on valittu oletusarvoisesti JScrollPane listScroller = new JScrollPane(list); listScroller.setPreferredSize(new Dimension(250, 80)); //Annetaan valikolle tilaa 250 x 80 pikseliä return listScroller; //Palautetaan lista } } 4-c: Selitä miten graafisen käyttöliittymän komponentteja voidaan asemoida (kyseessä on siis lay-out). Millaisia layout-managereita Javassa on? Anna yksinkertaisia mutta valaisevia ja toimivia ohjelmaesimerkkejä. Miten eri layout-managerit reagoivat ikkunan koon muuttamiseen? Miten eri layout-managereilla voidaan toteuttaa ikkuna, jonka koon kasvaessa jotkin komponentit suurenevat, mutta jotkin - esimerkiksi painikkeet - eivät? Toiko Javan versio 1.5 joitakin muutoksia asemoinnin välineisiin?Javassa on seitsemän erilaista layout-manageria, jotka eroavat toiminnaltaan. Oletuksena JPaneleihin liittyen on päällä FlowLayout-niminen manageri, joka asettaa komponentit yhdelle tai useammalle riville komponenttien preferredSize-asetusten mukaisesti. Muita layout-managereita ovat:
- FlowLayout
import javax.swing.*; import java.awt.*; public class GuiLuokkaFlow extends JFrame { //Tämä luokka on JFrame-luokan "laajennos" public GuiLuokkaFlow() { //Konstruktori Container container = getContentPane(); //Luodaan Container-olio container.setLayout(new FlowLayout(FlowLayout.LEFT, 5, 15)); //Asetetaan Container-olion layoutiksi FlowLayout for (int i = 0; i < 10; i++) //Tehdään kymmenen painonappia container.add(new JButton("Component " + i)); //Luo ikkunaan painonapin } public static void main(String[] args) { GuiLuokkaFlow gui = new GuiLuokkaFlow(); //Luo uuden ikkunan gui.setSize(200, 200); //Asettaa ikkunalle koon Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize(); //Hakee ruudun koon Dimension-olioon screenSize int screenWidth = screenSize.width; //Hakee ruudun leveyden Dimension-oliosta screenSize int-tyyppiseen muuttujaan int screenHeight = screenSize.height; //Hakee ruudun korkeuden Dimension-oliosta screenSize int-tyyppiseen muuttujaan Dimension frameSize = gui.getSize(); //Hakee ikkunan koon Dimension-olioon frameSize int x = (screenWidth - frameSize.width)/2; //Vähentää ruudun leveydestä ikkunan leveyden ja erotuksena saa ikkunan vasemman yläkulman paikan vaakasuunnassa int y = (screenHeight - frameSize.height)/2; //Vähentää ruudun korkeudesta ikkunan korkeuden ja erotuksena saa ikkunan vasemman yläkulman paikan pystysuunnassa gui.setTitle("Ikkunan nimi"); //Asettaa ikkunalle nimen gui.setLocation(x, y); //Asettaa ikkunan vasemman yläkulman paikaksi x:n ja y:n. gui.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //Tappaa ohjelman suorituksen kun ikkuna suljetaan gui.setVisible(true); //Tekee ikkunan näkyväksi } } - GridLayoutimport javax.swing.*; import java.awt.*; public class GuiLuokkaGrid extends JFrame { //Tämä luokka on JFrame-luokan "laajennos" public GuiLuokkaGrid() { //Konstruktori Container container = getContentPane(); //Luodaan Container-olio container.setLayout(new GridLayout(4, 3, 5, 5)); //Asetetaan Container-olion layoutiksi FlowLayout for (int i = 0; i < 10; i++) //Tehdään kymmenen painonappia container.add(new JButton("Component " + i)); //Luo ikkunaan painonapin } public static void main(String[] args) { GuiLuokkaGrid gui = new GuiLuokkaGrid(); //Luo uuden ikkunan gui.setSize(200, 200); //Asettaa ikkunalle koon Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize(); //Hakee ruudun koon Dimension-olioon screenSize int screenWidth = screenSize.width; //Hakee ruudun leveyden Dimension-oliosta screenSize int-tyyppiseen muuttujaan int screenHeight = screenSize.height; //Hakee ruudun korkeuden Dimension-oliosta screenSize int-tyyppiseen muuttujaan Dimension frameSize = gui.getSize(); //Hakee ikkunan koon Dimension-olioon frameSize int x = (screenWidth - frameSize.width)/2; //Vähentää ruudun leveydestä ikkunan leveyden ja erotuksena saa ikkunan vasemman yläkulman paikan vaakasuunnassa int y = (screenHeight - frameSize.height)/2; //Vähentää ruudun korkeudesta ikkunan korkeuden ja erotuksena saa ikkunan vasemman yläkulman paikan pystysuunnassa gui.setTitle("Ikkunan nimi"); //Asettaa ikkunalle nimen gui.setLocation(x, y); //Asettaa ikkunan vasemman yläkulman paikaksi x:n ja y:n. gui.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //Tappaa ohjelman suorituksen kun ikkuna suljetaan gui.setVisible(true); //Tekee ikkunan näkyväksi } }- BorderLayout mahdollistaa komponenttien asettamisen ilmansuuntien ja muutaman muun tunnuksen perusteella eri kohtiin paneelia. Ilmansuuntia ovat esim. NORTH, SOUTH ja muita tunnuksia PAGE_START, LINE_START, jne.
import javax.swing.*; import java.awt.*; public class GuiLuokkaBorder extends JFrame { public GuiLuokkaBorder() { Container container = getContentPane(); container.setLayout(new BorderLayout(5, 10)); container.add(new JButton("East"), BorderLayout.EAST); container.add(new JButton("South"), BorderLayout.SOUTH); container.add(new JButton("West"), BorderLayout.WEST); container.add(new JButton("North"), BorderLayout.NORTH); container.add(new JButton("Center"), BorderLayout.CENTER); } public static void main(String[] args) { GuiLuokkaBorder gui = new GuiLuokkaBorder(); gui.setTitle("BorderLayout"); gui.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); gui.setSize(300,300); gui.setVisible(true); } }- BoxLayoutilla komponentit saa joko päällekkäin tai riveille.
- CardLayoutilla voi nimensä mukaisesti hallita useaa samassa ikkunatilassa näytettävää JPanelia, joiden välillä käyttäjän on mahdollista navigoida.
- GridBagLayout on joustavin, mutta samalla monimutkaisin tarjolla oleva layout manageri. Se mahdollistaa komponenttien sijoittelun riveillä ja sarakkeilla sijaitseviin soluihin.
- SpringLayout lisättiin Javan versioon 1.4 tukemaan graafisten sovelluskehittimien tarpeita.