Principy tvorby GUI
Proč to potřebuji?
Grafické uživatelské rozhraní (GUI) je nezbytné pro tvorbu desktopových aplikací. Pochopení událostmi řízeného programování a návrhového vzoru MVC je klíčové pro správný návrh interaktivních aplikací.
Teorie
Událostmi řízené programování (event-driven): program reaguje na události (kliknutí, stisk klávesy). Registrují se listenery, které se volají při události.
MVC (Model-View-Controller): Model = data a logika, View = zobrazení, Controller = zpracování vstupů. Oddělení zodpovědností.
Layouty řídí rozmístění komponent: FlowLayout, BorderLayout, GridLayout, BoxLayout.
Příklady
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
// === Model ===
class PocitadloModel {
private int hodnota = 0;
public int getHodnota() { return hodnota; }
public void zvys() { hodnota++; }
public void sniz() { hodnota--; }
}
// === View + Controller (zjednodušené) ===
public class PocitadloGUI extends JFrame {
private PocitadloModel model = new PocitadloModel();
private JLabel label;
public PocitadloGUI() {
setTitle("Počítadlo");
setDefaultCloseOperation(EXIT_ON_CLOSE);
setSize(300, 150);
// Komponenty
label = new JLabel("0", SwingConstants.CENTER);
label.setFont(new Font("Arial", Font.BOLD, 24));
JButton plusBtn = new JButton("+");
JButton minusBtn = new JButton("-");
// Layout
setLayout(new BorderLayout());
add(label, BorderLayout.CENTER);
JPanel panel = new JPanel(new FlowLayout());
panel.add(minusBtn);
panel.add(plusBtn);
add(panel, BorderLayout.SOUTH);
// Event listenery (Controller)
plusBtn.addActionListener(e -> {
model.zvys();
aktualizujView();
});
minusBtn.addActionListener(e -> {
model.sniz();
aktualizujView();
});
}
private void aktualizujView() {
label.setText(String.valueOf(model.getHodnota()));
}
public static void main(String[] args) {
SwingUtilities.invokeLater(() -> {
new PocitadloGUI().setVisible(true);
});
}
}
// Komponenty s modelem – příklad JTable
String[] sloupce = {"Jméno", "Věk"};
Object[][] data = {{"Jan", 25}, {"Eva", 22}};
JTable tabulka = new JTable(data, sloupce);
// JTable používá TableModel pro oddělení dat od zobrazení
Shrnutí
Klíčové body
- Event-driven: listener reaguje na událost (
ActionListener,MouseListener) - MVC: Model (data) – View (zobrazení) – Controller (logika)
- Layout managery:
BorderLayout,FlowLayout,GridLayout - Swing:
JFrame,JPanel,JButton,JLabel,JTable