Programmieren II. Die Klasse JList. Vorlesung 5. Handout S. 1. Martin Schultheiß. Hochschule Darmstadt Sommersemester JList.

Ähnliche Dokumente
Programmieren II. Java im Vergleich zu anderen Sprachen. Einführung: GUI. Einführung: Grafische Benutzeroberflächen. Dr.

Fachhochschule Fulda Fachbereich Angewandte Informatik. Hausarbeit Seminar: Java3D. Java Layout-Manager WS 2002/2003

Objektorientierte Programmierung

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 11/12. Kapitel 7. Grafische Benutzeroberflächen

Entwicklung von E-Learning Komponenten zur Computergrafik

Java I Vorlesung 11 Graphische Oberflächen mit Swing

Swing Lernen am Code Teil 1

Institut für Informatik

Prof. Dr. Oliver Haase Karl Martin Kern Achim Bitzer. Programmiertechnik GUI-Programmierung mit Swing

Zentrale Objekte zur Programmierung graphischer Benutzeroberflächen (GUI)

...erinnern Sie sich? oopjs4b / kwhbkd4r

JButton, JCheckBox, JRadioButton. Programmieren II. Vorlesung 7. Handout S. 1. Dr. Klaus Höppner. Hochschule Darmstadt Sommersemester 2009.

GUI Programmierung mit JAVA Swing

Wiederholung: Objektorientierte Oberflächen-Programmierung mit Java und Swing

Grafische Benutzeroberflächen mit Swing

Ziel dieses Kapitels: Einführung in die Grundzüge der Programmierung graphischer Benutzeroberflächen (engl.: "graphical user interface", GUI) in Java

7. Architektur interaktiver Systeme

Einführung in Swing. Graphical User Interface

Mensch-Maschine-Interaktion

Objektorientierte Software-Entwicklung

Swing :Komponenten I (Teil 2)

Softwarepraktikum: Enigma

AWT. Einfache AWT-Anwendung. Swing. Vorlesung 1. Handout S. 2. import java. awt. * ;

AK-Automatisierungs und Kommunikationstechnik TI Technische Informatik. NWT Netzwerktechnik

J.1. J.1 GUI-Programmierung in in Java Prof. Dr. Rainer Manthey Informatik II 1

GUI-Programmierung in Java

Eingabe von Texten. Vorlesung Software-Entwicklung / Folie 101

11. GUI-Programmierung mit SWING Überblick

Vorlesung Programmieren. Bisher... Apple Lisa Office System 3.1. GUIs mit Java

Techniken der Projektentwicklung

Vorlesung Programmieren

7.1 Übersicht Geschichte von swing

GUIs in Java und ihre Programmierung

Hochschule der Medien Prof. Uwe Schulz 14. Juli 2010 Klausur Informatik, EDV-Nr Seite 1 von 5. Teil 2: Aufgaben

Auszug aus der Klassenstruktur

NTB Druckdatum:

Vorlesung 13. Sitzung Grundlegende Programmiertechniken

Lösungen. 1. Aufgabe. // ActionExample.java import java.awt.*; import java.awt.event.*; import javax.swing.*; import javax.swing.event.

Grafische Benutzungsschnittstellen (GUIs) mit Swing

Grafische Benutzungsschnittstellen (GUIs) mit Swing

Einstieg in die Informatik mit Java

2. Programmierung von Benutzungsschnittstellen

Java Lab 2006/12/13 Client

LayoutManager. Einsatz von LayoutManagern in AWT/Swing Containern. Prof. Dr. Nikolaus Wulff

Java: Swing Komponenten I. Maike Brandt

Einstieg in die Informatik mit Java

04 - Actions. Actions

Teil 1: Grundeigenschaften von Rechnern und Software

CS1005 Objektorientierte Programmierung Bachelor of Science (Informatik)

Teil 1: Neuerungen in Java 1.5 [15P]

Ein Manager mit CardLayout layout/cards.java

Grundlagen der Informatik für Ingenieure I. 8. AWT - Abstract Window Toolkit Teil 1

Graphische Nutzerschnittstellen

public class Beispiel1 extends Frame {

$ java awt.main A # typische Dekodierung $ java -Dtrace=all awt.main A # alle Events $ java -Dtrace=none awt.main A # keine Dekodierung

JAVA Oberflächen mit Swing

Übungen zu Einführung in die Informatik: Programmierung und Software-Entwicklung: Lösungsvorschlag

6. Objektorientiertes Design

Probeklausur: Programmierung WS04/05

Teil 1: Grundeigenschaften von Rechnern und Software

Informatik I Eprog HS10

PROG 2: Einführung in die Programmierung für Wirtschaftsinformatiker

Objektorientierte Softwareentwicklung

Nachholklausur (6 ECTS): Lösungsvorschlag Einführung in die Informatik: Programmierung und Software-Entwicklung. Nachname... Vorname...

Tutorial04: Swing: Erstellen eines JFrames mit einem JSplitPane

SWING. DVG2-09 -Swing 1

Benutzeroberflächen. Java Teil 4

Ansonsten VIEL SPAß! Nicholas Ohs (GK 11 IF 2)

Programmierkurs. 11. Vorlesung. Sven Mallach. 13. Januar Institut für Informatik - Lehrstuhl Prof. Dr. M. Jünger 1/ 60

Programmieren mit Swing

Abteilung Informatik, JFC/Swing 2004 Diego Schmidlin V2.2

Nachholklausur (6 ECTS) Einführung in die Informatik: Programmierung und Software-Entwicklung. Nachname... Vorname... Matrikelnummer... Studienfach...

Grundlagen der Programmierung APPLETS

GUI Programmierung in Java

Objektorientierte Programmierung OOP Objektorientierte Programmierung (OOP) mit Java

Inhaltsverzeichnis Einleitung...1 Die Begleit-CD zu diesem Buch...5 Erweiterungen für Java Ereignisse...15

Graphische Benutzungsoberflächen mit Java. Einführung in NetBeans

Programmieren 2 Selbststudium Semesterwoche 4

GUI-Programmierung in Java

In Track B generell gute Java-Kenntnisse vorausgesetzt!

GUI. Programmiermethodik. Eva Zangerle Universität Innsbruck

Dr. Monika Meiler. Inhalt

Java Beans.

Arbeitsblatt 5 EAD II NetBeans

GUI-Programmierung - Einführung

Aufbau einer Swing-Applikation

Java styleguide java styleguide

GUI-Programmierung - Einführung

Abteilung Informatik, JFC/Swing 2004 Diego Schmidlin V2.1. Abteilung Informatik, JFC/Swing 2004 Diego Schmidlin V2.1

GUI Design. Universität Paderborn Prof. Dr. Stefan Böttcher. Java Swing und AWT

Probeklausur: Programmierung WS04/05

Programmieren II. Timer. Vorlesung 11. Handout S. 1. Martin Schultheiß. Hochschule Darmstadt Sommersemester Timer. Sockets.

Beispiellösung der Klausur zu Objektorientierte Programmierung mit Java 09. Juli 2004 (SS 2004)

Programmieren in Java

Aufgabe 1 AUFRÄUMARBEIT, KONSISTENZ. »Programmieren«, WS 2006/2007. Nino Simunic M.A.

5. Das Java AWT (II) Components und Container

und mein Button JButton

2 Entwurf eines einfachen Telefonbuchs

Programmieren lernen mit Groovy Graphische Oberflächen GUIs (Graphical User Interfaces)

Transkript:

Programmieren II Martin Schultheiß Hochschule Darmstadt Sommersemester 2011 1 / 37 JList JTable Layout-Manager GridBagLayout 2 / 37 Die Klasse JList Die Klasse JList stellt einen Container für Auswahllisten zur Verfügung. Hierbei sind eine rein vertikale und eine tabellenartige Anordnung möglich. Weiterhin kann neben Einzelauswahl die Auswahl von Bereichen und mehreren Elementen zugelassen werden. Über die Methode addlistselectionlistener kann ein entsprechender Listener beim Selektieren benachrichtigt werden. Dieser muss die Methode valuechanged implementieren. 3 / 37 Handout S. 1

p u b l i c c l a s s App extends JFrame implements L i s t S e l e c t i o n L i s t e n e r { p r i v a t e J L i s t l i s t ; p u b l i c App( ) { super ( "Meine Anwendung" ) ; t h i s. setlayout (new BorderLayout ( ) ) ; S t r i n g [ ] data = {" e i n s ", " zwei ", " d r e i ", " v i e r ", " f u e n f " ; l i s t = new J L i s t ( data ) ; l i s t. setlayoutorientation ( J L i s t.vertical) ; l i s t. setselectionmode ( L i s t S e l e c t i o n M o d e l.single_selection ) ; l i s t. a d d L i s t S e l e c t i o n L i s t e n e r ( t h i s ) ; t h i s. add ( l i s t, BorderLayout.PAGE_START) ; t h i s. pack ( ) ; t h i s. s e t V i s i b l e ( true ) ; 4 / 37 (Forts.) p u b l i c void valuechanged ( L i s t S e l e c t i o n E v e n t event ) { i f ( event. getvalueisadjusting ( ) ) return ; i f ( l i s t. g e t S e l e c t e d I n d e x ( )!= -1) { System. out. p r i n t l n ( l i s t. g e t S e l ectedvalue ( ) ) ; p u b l i c s t a t i c void main ( S t r i n g [ ] args ) { App myapp = new App ( ) ; 5 / 37 Resultat 6 / 37 Handout S. 2

ListModel In der im verwendeten Form ist JList sehr starr. Aus der Auswahlliste können z. B. keine Elemente hinzu gefügt oder entfernt werden. Möchte man flexiblere Listen, so kann man ein ListModel verwenden. In den meisten Fällen reicht DefaultListModel. Möchte man ein eigenes ListModel implementieren, so kann man die Klasse AbstractListModel als Basisklasse verwenden. 7 / 37 p u b l i c c l a s s App extends JFrame implements ActionListener, L i s t S e l e c t i o n L i s t e n e r { p r i v a t e J L i s t l i s t ; p r i v a t e DefaultListModel l i s t M o d e l ; p r i v a t e JTextField eingabe ; p u b l i c App( ) {... l i s t M o d e l = new DefaultListModel ( ) ; l i s t = new J L i s t ( l i s t M o d e l ) ; l i s t. setlayoutorientation ( J L i s t.vertical) ; l i s t. setselectionmode ( L i s t S e l e c t i o n M o d e l.single_selection ) ; l i s t. a d d L i s t S e l e c t i o n L i s t e n e r ( t h i s ) ; t h i s. add (new JScrollPane ( l i s t ), BorderLayout.PAGE_START) ; eingabe = new JTextField ( 2 0 ) ; eingabe. addactionlistener ( t h i s ) ; t h i s. add ( eingabe, BorderLayout.PAGE_END) ;... 8 / 37 (Forts.) p u b l i c void valuechanged ( L i s t S e l e c t i o n E v e n t event ) { i f ( event. getvalueisadjusting ( ) ) return ; i f ( l i s t. g e t S e l e c t e d I n d e x ( )!= -1) { System. out. p r i n t l n ( l i s t. g e t S e l ectedvalue ( ) ) ; p u b l i c void actionperformed ( ActionEvent event ) { l i s t M o d e l. addelement ( eingabe. gettext ( ) ) ; eingabe. settext ( "" ) ; 9 / 37 Handout S. 3

Die Klasse JTable Mit der Klasse JTable können Tabellen gestaltet werden, die z. B. Spaltentitel oder verschiebbare Spaltengrenzen besitzen. In der einfachsten Form erwartet der Konstruktor einen 2D-Array mit den Tabellendaten und einen Array mit den Spaltentiteln. Diese Form ist allerdings sehr starr, da die Tabellenfelder nicht geändert werden können und keine Zeilen hinzu gefügt oder geändert werden können. 10 / 37 p u b l i c c l a s s App extends JFrame { p u b l i c App( ) { super ( "Meine Anwendung" ) ; t h i s. setlayout (new BorderLayout ( ) ) ; S t r i n g [ ] columnnames = {" F i r s t Name", " Last Name", "Hobby" ; Object [ ] [ ] data = { {"Mary", "Campione", " Snowboarding ", {" Alison ", "Huml", "Rowing", {"Kathy", "Walrath", " Knitting ", {"Sharon", "Zakhour", "Speed reading ", {" P h i l i p ", " Milne ", " Pool " ; JTable mytable = new JTable ( data, columnnames ) ; mytable. s e t F i l l s V i e w p o r t H e i g h t ( true ) ; t h i s. add (new JScrollPane ( mytable ), BorderLayout.PAGE_START) ; t h i s. pack ( ) ; t h i s. s e t V i s i b l e ( true ) ; 11 / 37 Resultat 12 / 37 Handout S. 4

Eigene Tabellenmodelle Um ein eigenes Tabellenmodell zu implementieren, erbt man am Einfachsten von der Klasse AbstractTableModel. Hierin können folgende Methoden überschrieben werden: int getcolumncount() int getrowcount() Object getvalueat(row,col) void setvalueat(obj, row, col) Zahl der Spalten Zahl der Zeilen Element in Zeile row und Spalte col Setzt das Element in Zeile row und Spalte col auf obj 13 / 37 für ein Tabellenmodell Im folgenden wird ein Tabellenmodell implementiert, das für eine Menge von Zahlen 0... n 1 in der ersten Spalte die Zahl selber und in der zweiten das Quadrat dieser Zahl anzeigt. Hierbei ist die Zahl der Zeilen n variabel und kann durch eine Methode increase jeweils um eins erhöht werden. 14 / 37 Die Klasse MyTableModel p u b l i c c l a s s MyTableModel extends AbstractTableModel { p r i v a t e i n t index = 0 ; p u b l i c void i n c r e a s e ( ) { index++; t h i s. firetablestructurechanged ( ) ; p u b l i c i n t getcolumncount ( ) { return 2 ; p u b l i c i n t getrowcount ( ) { return index ; p u b l i c Object getvalueat ( i n t row, i n t c o l ) { i f ( c o l == 0) { return new I n t e g e r ( row ) ; e l s e i f ( c o l == 1) { return new I n t e g e r ( row*row ) ; e l s e return n u l l ; 15 / 37 Handout S. 5

Die Klasse App p u b l i c c l a s s App extends JFrame implements A c t i o n L i s t e n e r { p r i v a t e JButton applybutton ; p r i v a t e MyTableModel mymodel ; p u b l i c App( ) { super ( ) ; t h i s. s etdefaultcloseoperation ( JFrame.EXIT_ON_CLOSE) ; t h i s. setlayout (new BorderLayout ( ) ) ; applybutton = new JButton ( " Erweitern " ) ; t h i s. add ( applybutton, BorderLayout.PAGE_END) ; mymodel = new MyTableModel ( ) ; JTable t a b l e = new JTable (mymodel ) ; JScrollPane s c r o l l P a n e = new JScrollPane ( t a b l e ) ; t a b l e. s e t F i l l s V i e w p o r t H e i g h t ( true ) ; applybutton. addactionlistener ( t h i s ) ; t h i s. add ( scrollpane, BorderLayout.PAGE_START) ; t h i s. pack ( ) ; t h i s. s e t V i s i b l e ( true ) ; 16 / 37 Die Klasse App (Forts.) p u b l i c void actionperformed ( ActionEvent event ) { mymodel. i n c r e a s e ( ) ; p u b l i c s t a t i c void main ( S t r i n g [ ] args ) { App app = new App ( ) ; 17 / 37 Resultat 18 / 37 Handout S. 6

Der Layout-Manager Der Layout-Manager ist für die Platzierung der Komponenten innerhalb eines Containers (z. B. ein Toplevel-Element) verantwortlich. Swing kennt im Wesentlichen: FlowLayout ordnet Komponenten von links nach rechts an BorderLayout Anordnung nach Himmelsrichtungen BoxLayout Erweiterung von FlowLayout um Zwischenräume und Glues GridLayout Anordnung in Zeilen und Spalten GridBagLayout komplexeres GridLayout 19 / 37 Als einfaches soll folgende Anwendung realisiert werden: Titelzeile oben, In der Mitte eine 2 2-Tabelle mit Label und einem Texteingabefeld in der ersten Zeile und Label und Ergebnisfeld in der zweiten Zeile, Anwendungsschaltfläche unten Beim Klicken auf Anwenden soll im eingegebenen Text die Anzahl des Buchstaben e gezählt und im Ergebnisfeld ausgegeben werden. 20 / 37 Grundgerüst import javax. swing. * ; import java. awt. * ; p u b l i c c l a s s MyApp extends JFrame { p r i v a t e JTextField eingabe ; p r i v a t e JLabel r e s u l t ; p u b l i c MyApp( S t r i n g t i t l e ) { super ( t i t l e ) ; t h i s. s etdefaultcloseoperation ( JFrame.EXIT_ON_CLOSE) ; t h i s. s e t S i z e (400, 2 0 0 ) ; t h i s. setlayout (new BorderLayout ( ) ) ; 21 / 37 Handout S. 7

Grundgerüst (Forts.) JLabel top = new JLabel ( " B i t t e einen Text eingeben " ) ; top. s e t H o r i z o n t a l T e x t P o s i t i o n ( SwingConstants.CENTER) ; t h i s. add ( top, BorderLayout.PAGE_START) ; JButton applybutton = new JButton ( "Anwenden" ) ; t h i s. add ( applybutton, BorderLayout.PAGE_END) ; p u b l i c s t a t i c void main ( S t r i n g [ ] args ) { MyApp app = new MyApp( " e - Anwendung" ) ; app. s e t V i s i b l e ( true ) ; 22 / 37 Aktueller Stand Durch dieses Grundgerüst existieren das Hauptfenster mit zentrierter Titelzeile oben und einer Schaltfläche Anwenden unten. Die Tabelle im Format 2 2 in der Mitte soll im GridLayout gesetzt werden. Hierfür wird im Zentrum ein Container, nämlich ein JPanel eingefügt, der das Grid enthält. 23 / 37 Neuer Konstruktor von MyApp p u b l i c MyApp( S t r i n g t i t l e ) { super ( t i t l e ) ;... JPanel mid = new JPanel ( ) ; mid. setlayout (new GridLayout ( 2, 2, 1 0, 1 0 ) ) ; t h i s. add ( mid, BorderLayout.CENTER) ; eingabe = new JTextField ( ) ; r e s u l t = new JLabel ( ) ; mid. add (new JLabel ( " Eingabe " ) ) ; mid. add ( eingabe ) ; mid. add (new JLabel ( "Antwort" ) ) ; mid. add ( r e s u l t ) ; 24 / 37 Handout S. 8

GridLayout Die Layout-Klasse GridLayout kennt drei Konstruktoren: GridLayout() Standardkonstruktor, GridLayout(int rows, int cols) Grid mit Angabe von Zahl der Zeilen und Spalten, GridLayout(int rows, int cols, int hgap, int vgap) wie zuvor, aber mit Angabe von horizontalem (hgap) und vertikalem (vgap) Abstand zwischen den Zellen. 25 / 37... import java. awt. event. * ; Quelltext p u b l i c c l a s s MyApp extends JFrame implements A c t i o n L i s t e n e r { p r i v a t e JTextField eingabe ; p r i v a t e JLabel r e s u l t ; p u b l i c MyApp( S t r i n g t i t l e ) {... applybutton. addactionlistener ( t h i s ) ; p u b l i c void actionperformed ( ActionEvent event ) { i n t count = 0 ; S t r i n g t e x t = eingabe. gettext ( ) ; f o r ( i n t i =0; i<t e x t. length ( ) ; i++) { i f ( t e x t. charat ( i)== ' e ' ) count++; r e s u l t. settext ( S t r i n g. valueof ( count ) ) ; 26 / 37 Kompletter Quelltext import java. awt. * ; import java. awt. event. * ; p u b l i c c l a s s MyApp extends JFrame implements A c t i o n L i s t e n e r { p r i v a t e JTextField eingabe ; p r i v a t e JLabel r e s u l t ; p u b l i c MyApp( S t r i n g t i t l e ) { super ( t i t l e ) ; t h i s. s etdefaultcloseoperation ( JFrame.EXIT_ON_CLOSE) ; t h i s. s e t S i z e (400, 1 5 0 ) ; t h i s. setlayout (new BorderLayout ( ) ) ; JLabel top = new JLabel ( " Text eingeben ", JLabel.CENTER) ; top. s e t H o r i z o n t a l T e x t P o s i t i o n ( SwingConstants.CENTER) ; t h i s. add ( top, BorderLayout.PAGE_START) ; 27 / 37 Handout S. 9

Kompletter Quelltext (Forts.) JButton applybutton = new JButton ( "Anwenden" ) ; t h i s. add ( applybutton, BorderLayout.PAGE_END) ; applybutton. addactionlistener ( t h i s ) ; JPanel mid = new JPanel ( ) ; mid. setlayout (new GridLayout ( 2, 2, 1 0, 1 0 ) ) ; t h i s. add ( mid, BorderLayout.CENTER) ; eingabe = new JTextField ( ) ; r e s u l t = new JLabel ( ) ; mid. add (new JLabel ( " Eingabe " ) ) ; mid. add ( eingabe ) ; mid. add (new JLabel ( "Antwort" ) ) ; mid. add ( r e s u l t ) ; 28 / 37 Kompletter Quelltext (Forts.) p u b l i c void actionperformed ( ActionEvent event ) { i n t count = 0 ; S t r i n g t e x t = eingabe. gettext ( ) ; f o r ( i n t i =0; i<t e x t. length ( ) ; i++) { i f ( t e x t. charat ( i)== ' e ' ) { count++; r e s u l t. settext ( S t r i n g. valueof ( count ) ) ; p u b l i c s t a t i c void main ( S t r i n g [ ] args ) { MyApp app = new MyApp( " e - Anwendung" ) ; app. s e t V i s i b l e ( true ) ; 29 / 37 GridBagLayout Einführung In vielen Anwendungen soll die Anordnung der Komponenten gitterartig erfolgen. Beim bisher benutzen GridLayout sind allerdings alle Zellen des Grids gleich groß, was zu einem unausgewogenen Layout führt. Hier ist das GridBagLayout überlegen. Das GridBagLayout hat folgende Eigenschaften: Komponenten können mehrere Zeilen oder Spalten einnehmen. Es kann definiert werden, in welche Richtungen eine Komponente wachsen kann. Die Ausrichtung von Komponenten innerhalb der Zelle kann definiert werden. Zellen kann ein Gewicht gegeben werden, das definiert, ob (und wie stark) die Zelle wachsen kann. 30 / 37 Handout S. 10

eines GridBagLayouts 31 / 37 Die Klasse GridBagConstraints Die zuvor beschriebenen Eigenschaften werden in einem GridBagConstraints-Objekt beschrieben. Dieses enthält die Attribute gridx, gridy Position der Komponente (Default: 0). Neben positiven Zahlen ist auch GridBagConstraints.RELATIVE zulässig. gridwidth, gridheight gibt die Zahl der Spalten bzw. Zeilen an, die die Komponente einnimmt (Default: 1). GridBagConstraints.REMAINDER zeigt an, dass diese Komponente die letzte in der Zeile bzw. Spalte ist und alle übrigen Zellen einnimmt. fill gibt an, ob die Komponente gedehnt wird. Zulässige Werte: GridBagConstraints.NONE (default),.both,.horizontal,.vertical 32 / 37 Die Klasse GridBagConstraints (Forts.) ipadx, ipady Padding in Pixeln innerhalb der Komponente anchor Anordnung der Komponente innerhalb der Zelle (wie in BorderLayout) weightx, weighty gibt an, wie stark die Zelle wachsen darf. Erlaubte Werte liegen zwischen 0 (gar nicht, default) und 1 (maximales Wachstum). Haben mehrere Komponenten innerhalb einer Zeile bzw. Spalte Gewichte > 0, so wird freier Platz auf die Komponenten anhand des Gewichtsverhältnisses verteilt. 33 / 37 Handout S. 11

p u b l i c c l a s s GridBagLayoutDemo extends JFrame { p u b l i c GridBagLayoutDemo ( ) { super ( "GidBagLyaoutDemo" ) ; setlayout ( new GridBagLayout ( ) ) ; s etdefaultcloseoperation ( JFrame.EXIT_ON_CLOSE) ; JButton button ; GridBagConstraints c ; button = new JButton ( " Button 1" ) ; c = new GridBagConstraints ( ) ; c. f i l l = GridBagConstraints.HORIZONTAL; c. gridx = 0 ; c. gridy = 0 ; c. weightx = 1 ; add ( button, c ) ; 34 / 37 button = new JButton ( " Button 2" ) ; c = new GridBagConstraints ( ) ; c. f i l l = GridBagConstraints.HORIZONTAL; c. gridx = GridBagConstraints.RELATIVE; c. gridy = 0 ; c. weightx = 0. 5 ; add ( button, c ) ; button = new JButton ( " Button 3" ) ; c = new GridBagConstraints ( ) ; c. f i l l = GridBagConstraints.HORIZONTAL; c. gridx = GridBagConstraints.RELATIVE; c. gridy = 0 ; add ( button, c ) ; 35 / 37 button = new JButton ( "Long - Named Button 4" ) ; c = new GridBagConstraints ( ) ; c. f i l l = GridBagConstraints.BOTH; c. ipady = 4 0 ; //make t h i s component t a l l c. weighty = 0. 5 ; c. gridwidth = 3 ; c. gridx = 0 ; c. gridy = GridBagConstraints.RELATIVE; add ( button, c ) ; 36 / 37 Handout S. 12

button = new JButton ( "5" ) ; c = new GridBagConstraints ( ) ; c. f i l l = GridBagConstraints.HORIZONTAL; c. ipady = 0 ; c. weighty = 1. 0 ; c. anchor = GridBagConstraints.PAGE_END; c. gridx = 1 ; // a l i g n e d with button 2 c. gridwidth = 2 ; //2 columns wide c. gridy = GridBagConstraints.RELATIVE; // t h i r d row add ( button, c ) ; pack ( ) ; s e t V i s i b l e ( true ) ; p u b l i c s t a t i c void main ( S t r i n g [ ] args ) { GridBagLayoutDemo app = new GridBagLayoutDemo ( ) ; 37 / 37 Handout S. 13