swing
Använda Swing för grafiska användargränssnitt
Sök…
Anmärkningar
Avsluta applikationen i fönstret stäng
Det är lätt att glömma att avsluta applikationen när fönstret är stängt. Kom ihåg att lägga till följande rad.
frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); //Quit the application when the JFrame is closed
Skapa ett tomt fönster (JFrame)
Skapa JFrame
Det är enkelt att skapa ett fönster. Du måste bara skapa en JFrame
.
JFrame frame = new JFrame();
Titlar fönstret
Du kanske vill ge ditt fönster en titel. Du kan göra det genom att skicka en sträng när du skapar JFrame
eller genom att ringa frame.setTitle(String title)
.
JFrame frame = new JFrame("Super Awesome Window Title!");
//OR
frame.setTitle("Super Awesome Window Title!");
Ställa in fönsterstorlek
Fönstret blir så litet som möjligt när det har skapats. För att göra den större kan du ställa in storleken uttryckligen:
frame.setSize(512, 256);
Eller så kan du ha själva ramstorleken baserad på storleken på innehållet med metoden pack()
.
frame.pack();
setSize()
och pack()
är ömsesidigt exklusiva, så använd det ena eller det andra.
Vad du ska göra på Window Close
Observera att programmet inte kommer att sluta när fönstret har stängts. Du kan avsluta applikationen efter att fönstret har stängts genom att JFrame
att göra det.
frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
Alternativt kan du be fönstret att göra något annat när det är stängt.
WindowConstants.DISPOSE_ON_CLOSE //Get rid of the window
WindowConstants.EXIT_ON_CLOSE //Quit the application
WindowConstants.DO_NOTHING_ON_CLOSE //Don't even close the window
WindowConstants.HIDE_ON_CLOSE //Hides the window - This is the default action
Skapa ett innehållsruta
Ett valfritt steg är att skapa en innehållsfönster för ditt fönster. Detta behövs inte, men om du vill göra det, skapa en JPanel
och samtal frame.setContentPane(Component component)
.
JPanel pane = new JPanel();
frame.setContentPane(pane);
Visar fönstret
När du har skapat den vill du skapa dina komponenter och sedan visa fönstret. Att visa fönstret är gjort som sådant.
frame.setVisible(true);
Exempel
För dig som gillar att kopiera och klistra in, här är några exempelkoder.
JFrame frame = new JFrame("Super Awesome Window Title!"); //Create the JFrame and give it a title
frame.setSize(512, 256); //512 x 256px size
frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); //Quit the application when the JFrame is closed
JPanel pane = new JPanel(); //Create the content pane
frame.setContentPane(pane); //Set the content pane
frame.setVisible(true); //Show the window
Lägga till komponenter
En komponent är ett slags användargränssnittselement, till exempel en knapp eller ett textfält.
Skapa en komponent
Att skapa komponenter är nästan identiskt med att skapa ett fönster. Istället för att skapa en JFrame
skapar du dock den komponenten. Till exempel, för att skapa en JButton
, gör du följande.
JButton button = new JButton();
Många komponenter kan skicka parametrar till dem när de skapas. Till exempel kan en knapp ges text att visa.
JButton button = new JButton("Super Amazing Button!");
Om du inte vill skapa en knapp kan en lista över vanliga komponenter hittas i ett annat exempel på den här sidan.
Parametrarna som kan skickas till dem varierar från komponent till komponent. Ett bra sätt att kontrollera vad de kan acceptera är genom att titta på parametrarna inom din IDE (Om du använder en). Standardgenvägar listas nedan.
- IntelliJ IDEA - Windows / Linux:
CTRL + P
- IntelliJ IDEA - OS X / macOS:
CMD + P
- Eclipse:
CTRL + SHIFT + Space
- NetBeans:
CTRL + P
Visar komponenten
När en komponent har skapats skulle du vanligtvis ställa in dess parametrar. Efter det måste du sätta det någonstans, till exempel på din JFrame
eller på din innehållsruta om du skapade en.
frame.add(button); //Add to your JFrame
//OR
pane.add(button); //Add to your content pane
//OR
myComponent.add(button); //Add to whatever
Exempel
Här är ett exempel på att skapa ett fönster, ställa in ett innehållsruta och lägga till en knapp i det.
JFrame frame = new JFrame("Super Awesome Window Title!"); //Create the JFrame and give it a title
frame.setSize(512, 256); //512 x 256px size
frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); //Quit the application when the JFrame is closed
JPanel pane = new JPanel(); //Create the content pane
frame.setContentPane(pane); //Set the content pane
JButton button = new JButton("Super Amazing Button!"); //Create the button
pane.add(button); //Add the button to the content pane
frame.setVisible(true); //Show the window
Ställa in parametrar för komponenter
Komponenter har olika parametrar som kan ställas in för dem. De varierar från komponent till komponent, så ett bra sätt att se vilka parametrar som kan ställas in för komponenter är att börja skriva componentName.set
och låta dina IDE: s autofyllt (om du använder en IDE) föreslå metoder. Standardgenvägen i många IDE: er, om den inte visas automatiskt, är CTRL + Space
.
Vanliga parametrar som delas mellan alla komponenter
Beskrivning | Metod |
---|---|
Anger den minsta storleken som komponenten kan vara (endast om layouthanteraren respekterar egenskapen minimumSize) | setMinimumSize(Dimension minimumSize) |
Ställer in den största storleken som komponenten kan vara (endast om layouthanteraren respekterar egenskapen maximumSize) | setMaximumSize(Dimension maximumSize) |
Ställer in den perforerade storleken på komponenten (endast om layouthanteraren hedrar den förmånliga storleken) | setPreferredSize(Dimension preferredSize) |
Visar eller döljer komponenten | setVisible(boolean aFlag) |
Ställer in om komponenten ska svara på användarinmatning | setEnabled(boolean enabled) |
Ställer in teckensnitt för text | setFont(Font font) |
Ställer in texten på verktygstipset | setToolTipText(String text) |
Ställer in bakgrundsfärgen på komponenten | setBackground(Color bg) |
Ställer in förgrundsfärgen (typsnittsfärg) för komponenten | setForeground(Color bg) |
Vanliga parametrar i andra komponenter
Vanliga komponenter | Beskrivning | Metod |
---|---|---|
JLabel , JButton , JCheckBox , JRadioButton , JToggleButton , JMenu , JMenuItem , JTextArea , JTextField | Ställer in den visade texten | setText(String text) |
JProgressBar , JScrollBar , JSlider , JSpinner | Ställer in ett numeriskt värde mellan komponentens min- och maxvärden | setValue(int n) |
JProgressBar , JScrollBar , JSlider , JSpinner | Set är det minsta möjliga värde som value kan vara | setMinimum(int n) |
JProgressBar , JScrollBar , JSlider , JSpinner | Set är det största möjliga värdet som value kan vara | setMaxmimum(int n) |
JCheckBox , JToggleBox | Uppsättningen är om värdet är sant eller falskt (t.ex.: Bör en kryssruta markeras?) | setSelected(boolean b) |
Vanliga komponenter
Beskrivning | Klass |
---|---|
Knapp | JButton |
Kryssruta | JCheckBox |
Listrutan / kombinationsrutan | JComboBox |
Märka | JLabel |
Lista | JList |
Menyfältet | JMenuBar |
Meny i en menyfält | JMenu |
Objekt i en meny | JMenuItem |
Panel | JPanel |
Framstegsfält | JProgressBar |
Radio knapp | JRadioButton |
Rullningslist | JScrollBar |
Slider | JSlider |
Spinner / Number picker | JSpinner |
Tabell | JTable |
Träd | JTree |
Textområde / Multiline textfält | JTextArea |
Textfält | JTextField |
Verktygsfält | JToolBar |
Skapa interaktiva användargränssnitt
Att ha en knapp där är allt bra och bra, men vad är poängen om att klicka på den gör ingenting? ActionListener
används för att berätta för din knapp eller annan komponent att göra något när den är aktiverad.
Lägga till ActionListener
s görs som sådan.
buttonA.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
//Code goes here...
System.out.println("You clicked the button!");
}
});
Eller om du använder Java 8 eller högre ...
buttonA.addActionListener(e -> {
//Code
System.out.println("You clicked the button!");
});
Exempel (Java 8 och högre)
JFrame frame = new JFrame("Super Awesome Window Title!"); //Create the JFrame and give it a title
frame.setSize(512, 256); //512 x 256px size
frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); //Quit the application when the JFrame is closed
JPanel pane = new JPanel(); //Create a pane to house all content
frame.setContentPane(pane);
JButton button = new JButton("Click me - I know you want to.");
button.addActionListener(e -> {
//Code goes here
System.out.println("You clicked me! Ouch.");
});
pane.add(buttonA);
frame.setVisible(true); //Show the window
Organisera komponentlayout
Att lägga till komponenter efter varandra resulterar i ett användargränssnitt som är svårt att använda, eftersom alla komponenter finns någonstans . Komponenterna beställs från topp till botten, varje komponent i en separat "rad".
För att avhjälpa detta och ge dig som utvecklare en möjlighet att enkelt LayoutManager
komponenter Swing har LayoutManager
s.
Dessa LayoutManagers behandlas mer utförligt i Introduktion till Layout Managers såväl som i de separata Layout Manager-ämnena: