Grafiska standardelement
Vi ska nu lära oss att avända knappar, txtboxar, labels, slider mm. Exempelvis kan det se ut så här:
Det hela kallas för GUI som stor för Graphical User Interface. Vi kommer att kunna snart disigna ett gränssnitt (=fönster) mot användaren med hjälp av färdiga element.
Det som krävs är ett tillägg, en så kalld bibliotek (library). Gör så här:
- Ta fliken Sketch --> Import Library ...
- Extrafönstret Contribution Manager visa alla tillägg som fins för processing
- Sök/Filtrera efter G4P
- Klick på raden för att markera och sedan knappen Install
Nu är utvecklingsmijön förberedd. För att kunna använda till exempel i ett program krävs en del saker:
- Första raden
import g4p_controls.*;
(rad 2) -
Deklarera en GButton knapp (rad 4)
-
I setup (rad 10-12)
- skapa knappen
- Sätt text på knappen
- koppla händelsen till en metod click <---> knapp_click
Ett fungerande exempel:
//Variabler
import g4p_controls.*; // importera biblioteket
GButton knapp;
void setup(){
size(360,200);
knapp = new GButton(this, 50, 20, 80, 40);
knapp.setText("Rita cirkel");
knapp.addEventHandler(this, "knapp_click");
}
public void knapp_click(GButton source, GEvent event) {
ellipse(100,100,50,50);
}
// låt vara kvar, behövs för funktion
// även om tom.
void draw(){
}
Laboration 1
-
Lägg till en knapp "Rita Kvadrat" med motsvarande metod.
-
Se till att det ritas nya cirklar resp. rectanglar med varje knapptryck dvs att positionen varieras.
GUI Builder
Det är rätt många steg som behövs för att implementera en knapp. Och det är likadant för andra GUI-element. Räät mycket kod som är samma och rätt mycket som kan går fel om det inte görs rätt. Men för processing finns en så kallad GUI-Builder, ett extra program som gör det åt dig. Så här lägger du till verktyget:
- Fliken Tools och sedan Add Tool ...
- Det öppnas samma fönster som för men nu med fliken Tools
- Filter igen efter G4P och du hittar G4P GUI Builder
- Välj raden G4P GUI Builder och installera
Nu har du lagt till verktyget för gott till din utvecklingsmiljö. Du hittar det sedan under Tools. G4P GUI Builder låter dig jobbar grafiskt med alla element. Och den skapa kod åt dig! Direkt när du öppna G4P GUI Builder så skapas fliken gui. Innehållet i den sköter G4P GUI Builder och det är bara tillåtet att lägga egen kod på vissa ställen.
OM GUI Builder
Grid: Koordinatsystemet som hjälper till med design. show för att visa, snap to för att fästa och Size för storleken.
Nästa rad: Alla tillgängliga element. Med dubbelklick skapas ett element på Main Window.
OBS! Alla nya ellement hmnar i mitten. Om du klickker tre gånnger på Button så ligger de ovanpåvarandra.
Controls: en hirakiskt list med alla element som finns just nu på fönstret. Genom att välja något visas alla egenskaper under PROPERTIES
Remove: Ta bort de valda element. OBS! OBS! OBS! Alla kod som generades för elementet raderas likaså!!!
Denna GUI-Builder skapa sedan i bakgrunden all kod som behövs. Kolla vad som händer i fliken gui. Ibland krävs att man klicka på fönstret för att uppdatera.
Köra en GUI
Koden är förberedd och det krävs bara lite för att det är körbart. Huvudprogrammet (= första flik) Måste innehåller det här:
import g4p_controls.*;
void setup() {
size(800, 600);
createGUI();
}
void draw(){
background(255);
}
Laboration 2
Skapa en knapp (GButton), en etikett (GLabel) och en textbox (GTextField). Döp de till (= ändra Variable Namn) till btnKnapp, txfInput och lblEtikett. Ändra sedan även Text fär knappen och promptText för textboxen. Sök sedan i koden (flik gui) efter den här raden med button1_click1 (siffror kan vaiera):
public void button1_click1(GButton source, GEvent event) { //_CODE_:button1:406832:
println("button1 - GButton >> GEvent." + event + " @ " + millis());
} //_CODE_:button1:406832:
ta bort raden println ...
och ersätt med lblEtikett.setText("Hello " + txfInput.getText() );
talvariabler och TextField
När man läser textboxen text med String svar = txfInput.getText();
så får man en sträng som returnvärde. Om det ska vara ett tal så måste det typkonverteras:
public void button1_click1(GButton source, GEvent event) { //_CODE_:button1:406832:
String svar = txfInput.getText();
float tal = Float.parseFloat(svar);
float euro = tal / 10.35;
lblEtikett.setText( tal + "kr motsvarar " + euro + " EUR");
} //_CODE_:button1:406832:
// Alternativ till parseFloat
int tal = Integer.parseInt(svar);
double tal = Double.parseDouble(svar);
-
Kolla metoden draw(). Ta bort
background(255);
och se vad händer när ändrar texten. -
Skapa nu ett program med två textboxar två knappar och en etikett (textfield, button och label). Vid knapptryck på det ena ska innehållet från de två textboxar adderas i andra falla subtraheras och visas på etiketten.
För mer info om Kontroller. Nästa sida
-
Skapa ett program med tre ratter (GKnob) Med hjälp av de ska användaren kunna bestämma färgen på en rectangel eller cirkel. Leka med inställningen för Mouse Controller Scheme. Vad betyder de inställningar? Funktion: Det första ratt för röd, andra för grön och tredje för blå. Utökning: gör två knappar som ökar resp. minskar alla tre färgen på en gång.
-
Ett Program som låter en GSlider styra en rektangel över fönstret. Så att när man drar i slidern ändras positonen av rektangeln.
-
Låtsas radioapparat: En ratt som låter dig välja mellan 6 Radioprogram: P1-P4, Rix FM och Mix Megapol. Rätt frekvens och namn ska visas i två Label. Ställ Gknob på *stick to ticks'.
-
Ta fram din HängaGubbe-metod. Överför den till ett nytt program. Låt en timer rita gubben stegvis med 2 sek avstånd. Utökning: En knapp för 'reset' och en knob/slider för att ändra tiden.
-
en ProgressBar som börja med 15 små rutor och minskar med en ruta per 2 sekunder.
-
Lite större utmaning: Låt två slider bestämma undre och övre gräns för slumptal. Visa alla tal i en textArea och grafiskt som staplar.
-
Ännu större utmaning: ett program som slumpar fram en uppgift av typen 4+7 och användaren ska mata in rätt svar. Programmet antecknar rätt och fell till det avlsutas. Kan du lägga till en tidsfaktor (timer) som ge typ 10s svarstid, annars blir det fel?
Egna modifikationer
I GUI Builder finns en del PROPERTIES men långt infrån alla. Inställningar och egenskaper som vi kan påverka med GUI Builder hamnar som code i fliken gui och där i metoden createGUI. Alla kod i den metoden genereras automatisk så borde inte röra den. Vi gör istället så här:
- skapa en flik till med namn guiCustom. I den läggs en metod
void customizeGUI(){ }
I denna metod kan vi lägga fler inställningar, till exempel Storlek för tecken på en knapp:
//Innehåll i fliken customGUI
import java.awt.Font; // viktigt! Annars inga fonts
void customizeGUI(){
//om du har en GButton med namn knapp1
knapp1.setFont(new Font("Courier New", Font.PLAIN, 20));
}
sedan krävs det bara att man anropar denna metod vid rätt tillfälle, med fördel direkt efter createGUI():
//Innehållet i första fliken
//Variabler
import g4p_controls.*;
void setup() {
size(320, 320);
createGUI();
customizeGUI();
}
void draw() {
background(255);
}