söndag 8 februari 2009

4.1 GUI - Graphic User Interface

En bra början för att kunna göra ett användbart javaprogram är att skapa ett GUI. Med knappar, textfält och lite annat användbart bygger vi upp en sida. I nästa kapitel kopplar vi händelser - events - till de olika komponenterna.

JFrame

Huvudfönstret med standardknappar, titelrad och utseendet vi känner igen från det operativsystem vi använder. Skapas såhär:
JFrame frame = new JFrame("GUIdemo");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

JPanel
En panel är en klass som ärver av klassen container, vilket betyder att den kan innehålla andra komponenter, tex knappar, textfält eller andra containers. Här skapas panelerna som används i GUIdemo:
// Create panels
JPanel mp = new JPanel(); // Main panel
JPanel bp = new JPanel(); // Button panel
JPanel np = new JPanel(); // North Panel
mp.setLayout(new BorderLayout());
bp.setLayout(new FlowLayout());
np.setLayout(new FlowLayout());
np.setBorder(new TitledBorder("North Panel"));
bp.setBorder(new TitledBorder("Buttonpanel"));
mp.setBorder(new TitledBorder("Main Panel"));
Metoden setLayout styr på vilket sätt komponenterna i panelen ska placeras ut. Flowlayout är mest basic. Där fylls allting på från vänster till höger tills det inte får plats fler, sen börjar nästa rad fyllas på. Borderlayout placerar ut längs kanterna eller i mitten: BorderLayout.NORTH, SOUTH, EAST, WEST, CENTER.

Här skapas knappar till den nedre panelen, och knapp-panelen bp placeras i main-panelen i SOUTH-läge:
// Create buttons to button panel
bp.add(new JButton("Panelbutton1"));
bp.add(new JButton("Panelbutton2"));

mp.add(bp, BorderLayout.SOUTH);
Sedan skapar vi knappar och choice-list till den övre "north panelen" np:
// Add stuff to north panel
np.add(new JLabel("JLabel"));
np.add(new JButton("JButton"));

// Create Choice-list and add to np.
Choice ch = new Choice();
ch.add(new String("Choice"));
ch.addItem(new String("-list"));
np.add(ch);
Skapa text-fält och scrollbar panel:
// Create textarea
JTextArea ta = new JTextArea(10, 20);
ta.append("JTextArea\ninside a JScrollPane");
ta.setLineWrap(true);

JScrollPane scrPane = new JScrollPane(ta);
scrPane.setBorder(new TitledBorder("JScrollPane"));
Sist av allt ska panelerna (och ett par labels som visa east & west) placeras ut på huvudpanelen mp:
// Add panels and labels to main panel
mp.add(np, BorderLayout.NORTH);
mp.add(bp, BorderLayout.SOUTH);
mp.add(new JLabel("East"), BorderLayout.EAST);
mp.add(new JLabel("West"), BorderLayout.WEST);
mp.add(scrPane, BorderLayout.CENTER);
För att kunna placera ut panelerna i frame'n behöver vi komma åt containern, dvs den lediga ytan under den övre titelraden i fönstret. Denna kommer vi åt genom:
frame.getContentPane().add(mp); // mp --> framens container

//Display the window.
frame.pack();
frame.setVisible(true);
De sista två raderna "packar" framen så allting får plats, och till sist visas våran frame. Detta är det sista vi gör i programmet, när allt är "färdigmöblerat".

Hela programmet hittar du här.

Inga kommentarer:

Skicka en kommentar