swing
Używanie Swinga do graficznych interfejsów użytkownika
Szukaj…
Uwagi
Zamykanie aplikacji po zamknięciu okna
Łatwo zapomnieć o zamknięciu aplikacji, gdy okno jest zamknięte. Pamiętaj, aby dodać następujący wiersz.
frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); //Quit the application when the JFrame is closed
Tworzenie pustego okna (JFrame)
Tworzenie JFrame
Tworzenie okna jest łatwe. Musisz tylko utworzyć JFrame
.
JFrame frame = new JFrame();
Tytuł okna
Możesz nadać swojemu tytułowi tytuł. Możesz to zrobić, przekazując ciąg znaków podczas tworzenia JFrame
lub wywołując frame.setTitle(String title)
.
JFrame frame = new JFrame("Super Awesome Window Title!");
//OR
frame.setTitle("Super Awesome Window Title!");
Ustawianie rozmiaru okna
Po utworzeniu okno będzie tak małe, jak to możliwe. Aby powiększyć, możesz jawnie ustawić jego rozmiar:
frame.setSize(512, 256);
Możesz też ustawić rozmiar ramki w oparciu o rozmiar jej zawartości za pomocą metody pack()
.
frame.pack();
Metody setSize()
i pack()
wykluczają się wzajemnie, więc używaj jednej lub drugiej.
Co robić w oknie Zamknij
Pamiętaj, że aplikacja nie zostanie zamknięta po zamknięciu okna. Możesz zamknąć aplikację po zamknięciu okna, informując JFrame
aby to zrobił.
frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
Możesz też powiedzieć okno, aby zrobiło coś innego, gdy jest zamknięte.
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
Tworzenie okienka treści
Opcjonalnym krokiem jest utworzenie okienka zawartości dla twojego okna. Nie jest to konieczne, ale jeśli chcesz to zrobić, utwórz JPanel
i wywołaj frame.setContentPane(Component component)
.
JPanel pane = new JPanel();
frame.setContentPane(pane);
Pokazywanie okna
Po jego utworzeniu będziesz chciał utworzyć komponenty, a następnie wyświetlić okno. Wyświetlanie okna odbywa się jako takie.
frame.setVisible(true);
Przykład
Dla tych, którzy lubią kopiować i wklejać, oto przykładowy kod.
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
Dodawanie komponentów
Składnik jest pewnego rodzaju elementem interfejsu użytkownika, takim jak przycisk lub pole tekstowe.
Tworzenie komponentu
Tworzenie komponentów jest prawie identyczne jak tworzenie okna. Zamiast tworzyć JFrame
, tworzysz ten komponent. Na przykład, aby utworzyć JButton
, wykonaj następujące czynności.
JButton button = new JButton();
Wiele komponentów może mieć parametry przekazane im podczas tworzenia. Na przykład przycisk może otrzymać tekst do wyświetlenia.
JButton button = new JButton("Super Amazing Button!");
Jeśli nie chcesz tworzyć przycisku, listę typowych składników można znaleźć w innym przykładzie na tej stronie.
Parametry, które można im przekazać, różnią się w zależności od komponentu. Dobrym sposobem sprawdzenia, co mogą zaakceptować, jest sprawdzenie parametrów w twoim IDE (jeśli go używasz). Domyślne skróty są wymienione poniżej.
- IntelliJ IDEA - Windows / Linux:
CTRL + P
- IntelliJ IDEA - OS X / macOS:
CMD + P
- Zaćmienie:
CTRL + SHIFT + Space
- NetBeans:
CTRL + P
Pokazywanie komponentu
Po utworzeniu komponentu zwykle ustawia się jego parametry. Następnie musisz go gdzieś umieścić, na przykład na ramce JFrame
lub w okienku zawartości, jeśli ją utworzyłeś.
frame.add(button); //Add to your JFrame
//OR
pane.add(button); //Add to your content pane
//OR
myComponent.add(button); //Add to whatever
Przykład
Oto przykład utworzenia okna, ustawienia okienka treści i dodania do niego przycisku.
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
Ustawianie parametrów dla komponentów
Komponenty mają różne parametry, które można dla nich ustawić. Różnią się one w zależności od komponentu, więc dobrym sposobem na sprawdzenie, jakie parametry można ustawić dla komponentów, jest rozpoczęcie pisania componentName.set
nazwa_komponentu.set i umożliwienie autouzupełniania IDE (jeśli używasz IDE) sugerowania metod. Domyślny skrót w wielu IDE, jeśli nie pojawia się automatycznie, to CTRL + Space
.
Wspólne parametry, które są wspólne dla wszystkich komponentów
Opis | metoda |
---|---|
Ustawia najmniejszy rozmiar, jaki może być komponent (tylko jeśli menedżer układu honoruje właściwość minimumSize) | setMinimumSize(Dimension minimumSize) |
Ustawia największy rozmiar, jaki może być komponent (tylko jeśli menedżer układu honoruje właściwość maximumSize) | setMaximumSize(Dimension maximumSize) |
Ustawia preferowany rozmiar komponentu (tylko jeśli menedżer układu honoruje właściwość preferSize) | setPreferredSize(Dimension preferredSize) |
Pokazuje lub ukrywa komponent | setVisible(boolean aFlag) |
Ustawia, czy komponent powinien reagować na dane wejściowe użytkownika | setEnabled(boolean enabled) |
Ustawia czcionkę tekstu | setFont(Font font) |
Ustawia tekst podpowiedzi | setToolTipText(String text) |
Ustawia kolor tła komponentu | setBackground(Color bg) |
Ustawia kolor pierwszego planu (kolor czcionki) komponentu | setForeground(Color bg) |
Wspólne parametry w innych komponentach
Wspólne elementy | Opis | metoda |
---|---|---|
JLabel , JButton , JCheckBox , JRadioButton , JToggleButton , JMenu , JMenuItem , JTextArea , JTextField | Ustawia wyświetlany tekst | setText(String text) |
JProgressBar , JScrollBar , JSlider , JSpinner | Ustaw wartość liczbową między wartościami minimalną i maksymalną składnika | setValue(int n) |
JProgressBar , JScrollBar , JSlider , JSpinner | Ustaw najmniejszą możliwą wartość, value może być właściwość value | setMinimum(int n) |
JProgressBar , JScrollBar , JSlider , JSpinner | Ustaw największą możliwą wartość, value może być właściwość value | setMaxmimum(int n) |
JCheckBox , JToggleBox | Ustawia, czy wartość jest prawdą czy fałszem (np .: Czy pole wyboru powinno być zaznaczone?) | setSelected(boolean b) |
Wspólne elementy
Opis | Klasa |
---|---|
Przycisk | JButton |
Pole wyboru | JCheckBox |
Rozwijane menu / pole kombi | JComboBox |
Etykieta | JLabel |
Lista | JList |
Pasek menu | JMenuBar |
Menu na pasku menu | JMenu |
Pozycja w menu | JMenuItem |
Płyta | JPanel |
Pasek postępu | JProgressBar |
Przycisk radiowy | JRadioButton |
Pasek przewijania | JScrollBar |
Suwak | JSlider |
Spinner / Number picker | JSpinner |
Stół | JTable |
Drzewo | JTree |
Pole tekstowe / pole tekstowe z wieloma wierszami | JTextArea |
Pole tekstowe | JTextField |
Pasek narzędzi | JToolBar |
Tworzenie interaktywnych interfejsów użytkownika
Posiadanie przycisku jest dobre i dobre, ale po co kliknięcie go nic nie robi? ActionListener
s służy do informowania przycisku lub innego komponentu, aby zrobił coś, gdy jest on aktywowany.
Dodawanie ActionListener
odbywa się jako takie.
buttonA.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
//Code goes here...
System.out.println("You clicked the button!");
}
});
Lub jeśli używasz Java 8 lub nowszej ...
buttonA.addActionListener(e -> {
//Code
System.out.println("You clicked the button!");
});
Przykład (Java 8 i wyżej)
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
Organizowanie układu komponentu
Dodanie składników jeden po drugim powoduje, że interfejs użytkownika jest trudny w użyciu, ponieważ wszystkie składniki są gdzieś . Składniki są uporządkowane od góry do dołu, każdy element w osobnym „rzędzie”.
Aby temu zaradzić i zapewnić programistom możliwość łatwego układania komponentów Swing ma LayoutManager
.
Te narzędzia LayoutManagers zostały szerzej omówione we wstępie do Menedżerów układów, a także w osobnych tematach Menedżera układów: