Hej där! Som en svängleverantör har jag hanterat alla slags gungor frånInomhus gunga för trädgårdtillDäckets bakgårdssvinguppsättningarochTräsvängning för park. Men idag vill jag prata om något lite annorlunda - hur man hanterar tangentbordshändelser i Swing.
Swing är en ganska cool Java GUI -verktygssats som låter dig skapa alla typer av interaktiva applikationer. Och hantering av tangentbordshändelser är en viktig del av att göra dessa appar användare - vänlig. Du vet, användare förväntar sig att kunna använda sina tangentbord för att navigera genom din app, utlösa åtgärder och göra alla slags saker. Så låt oss gräva in hur vi kan få det att hända.
Förstå tangentbordshändelser i Swing
Först och främst, vad är tangentbordshändelser? I gunga genereras tangentbordshändelser när en användare trycker på eller släpper en tangent på tangentbordet. Det finns tre huvudtyper av tangentbordshändelser:Key_pressed,Key_releasedochKey_typed.
Key_pressed: Denna händelse avfyras när en knapp trycks ner. Det ger dig information om den fysiska knappen som trycktes, som pilknapparna, funktionstangenterna etc.Key_released: Som namnet antyder avfyras denna händelse när nyckeln släpps. Det är användbart när du vill utföra en åtgärd efter att användaren har släppt en nyckel.Key_typed: Denna händelse är relaterad till karaktären som skrivits. Det tar hänsyn till saker som tangentbordslayout och modifierare (som skift- eller kepslås) för att bestämma det faktiska tecken som anges.
Lägga till en nyckel lyssnare
För att hantera tangentbordshändelser i gunga måste du lägga till enKeylisttill en komponent. EnKeylistär ett gränssnitt som har tre metoder som motsvarar de tre typerna av tangentbordshändelser som vi just pratade om:nyckelprimerad,kipeleleasedochnyckelped.
Här är ett enkelt exempel på hur du kan lägga till enKeylisttill enJtextfield:
import javax.swing.*; import java.awt.event.keyadapter; import java.awt.event.keyevent; public class KeyEventExample {public static void main (String [] args) {jFrame Frame = new JFrame ("Nyckelhändelse Exempel"); JTextField TextField = new JTextField (20); TextField.AddKeylistener (new KeyAdapter () {@Override public void keyPressing (keyEvent e) {System.out.println ("Key Pressed:" + keyEvent.getKeyText (E.GetKeyCode ());} @Override public void KeyreLeeleased (keyevent e) {System.Oter.PrintLn ("Key släppt:" + + + + + + + + + + + + + + + + + + + + + + + +! KeyEvent.GetKeyText (e.getKeyCode ())); ram.add (textfield); ram.setDefaultCloseOperation (jframe.exit_on_close); ram.pack (); ram.setVisible (true); }}
I det här exemplet skapar vi en enkelJframemed enJtextfield. Vi lägger sedan till enNyckeladapter(som är en bekväm klass som implementerarKeylistgränssnitt och tillhandahåller tomma implementeringar av metoderna) tillJtextfield. InutiNyckeladapter, vi åsidosätternyckelprimerad,kipeleleasedochnyckelpedMetoder för att skriva ut information om tangentbordshändelser.


Använda viktiga bindningar
MedanKeylistFungerar bra för enkla fall, det har vissa begränsningar. Till exempel fungerar det inte bra med komponenter som har sitt eget standardtangentbeteende, somJButtonellerNamn. Det är där nyckelbindningar kommer in.
Viktiga bindningar i gunga gör att du kan associera en nyckelslag med en åtgärd. En nyckelslag kan vara en enda nyckel eller en kombination av nycklar (som Ctrl + S). En åtgärd är ett objekt som implementerarHandlinggränssnitt och har enuppförandeMetod som kallas när nyckelslaget utlöses.
Här är ett exempel på hur du kan använda nyckelbindningar för att hantera Enter -tangenten i enJtextfield:
import javax.swing.*; import java.awt.event.actionEvent; import java.awt.event.keyevent; public class KeyBindingExample {public static void main (String [] args) {JFrame Frame = new JFrame ("Key Binding Exempel"); JTextField TextField = new JTextField (20); Action EnterAction = new AbstractAction () {@Override public void actionPerformed (ActionEvent E) {System.out.println ("Ange tangentpressad. Text:" + TextField.GetText ()); }}; InputMap InputMap = TextField.GetInputMap (jComponent.When_Focused); ActionMap ActionMap = TextField.GetActionMap (); Keystroke EnterkeYStroke = keystroke.getKeystroke (keyEvent.vk_Enter, 0); InputMap.put (EnterkeYStroke, "Enteraction"); actionmap.put ("Enteraction", Enteraction); ram.add (textfield); ram.setDefaultCloseOperation (jframe.exit_on_close); ram.pack (); ram.setVisible (true); }}
I det här exemplet skapar vi enAbstraktsom skriver ut texten iJtextfieldNär anterknappen trycks in. Vi får sedan inmatningskartan och handlingskartan förJtextfield. Vi skapar enTangenttryckFör Enter -tangenten och lägg den i ingångskartan och associera den med strängen "Enteraction". Slutligen sätter vi åtgärden på handlingskartan med samma sträng som nyckeln.
Hantering av modifiernycklar
Modifiernycklar som Shift, CTRL och ALT används ofta i kombination med andra nycklar för att utföra specialåtgärder. I gunga kan du hantera modifieringsknappar genom att inkludera dem iTangenttryckNär du använder nyckelbindningar.
Till exempel för att hantera Ctrl + S:
Keystroke SaveKeystroke = Keystroke.getKeystroke (keyEvent.vk_s, keyEvent.ctrl_down_mask);
Du kan sedan associera dettaTangenttryckmed en åtgärd precis som vi gjorde i föregående exempel.
Fokus och tangentbordshändelser
Det är viktigt att notera att tangentbordshändelser endast tas emot av komponenten som har fokus. Så om du vill att en viss komponent ska ta emot tangentbordshändelser måste du se till att den har fokus. Du kan ställa in fokus programmatiskt medRequestFocusInwindowmetod.
textfield.requestfocusinWindow ();
Testning och felsökning
När du arbetar med att hantera tangentbordshändelser är det en bra idé att testa din kod noggrant. Du kan användaSystem.out.printlnUttalanden för att skriva ut information om tangentbordshändelserna, som vi gjorde i exemplen. Du kan också använda en felsökare för att gå igenom din kod och se vad som händer.
Slutsats
Hantering av tangentbordshändelser i Swing är en viktig del av att skapa interaktiva Java -applikationer. Oavsett om du använderKeylistFör enkla fall eller tangentbindningar för mer komplexa scenarier kommer att förstå hur du hanterar tangentbordshändelser att göra dina appar mer användare - vänliga.
Om du är på marknaden för högkvalitativa svängningar, vare sig detInomhus gunga för trädgård,Däckets bakgårdssvinguppsättningarellerTräsvängning för park, vi har täckt dig. Om du är intresserad av att köpa våra gungor, tveka inte att nå en upphandlingsdiskussion. Vi är alltid redo att prata om dina behov och hitta de perfekta svänglösningarna för dig.
Referenser
- "Effektiv Java" av Joshua Bloch
- "Java Swing" av Eckstein, Hanson och Roberts
