−Table of Contents
Okénko s několika ovládacími prvky
Podobně jako v prvním příkladu vytvoříme nový projekt:
Menu File, New Project, Java Ant / Java Application
Projekt pojmenuji Introduction s velkým písmenem.
Balíček (package) se bude jmenovat introduction s malým písmenem.
Necháme si vytvořit hlavní třídu introduction.Introduction, kterou později vymažeme.
Vytvoříme nový JFrame a pojmenujeme ho MainWindow
(pravou myší na balíček introduction, z kontextového menu New a potom JForm)
Z palety přidáme
- Check Box, bude typu JCheckBox a dostane identifikátor jCheckBox1
- Text Field, s identifikátorem jTextField1
- Slider, jSlider1
- Text Area, jTextArea1
- Button, jButton1
Dvakrát klikneme na tlačítko jButton1, objeví se funkce jButton1ActionPerformed,
do této funkce doplníme pár řádků a sami napíšeme celou funkci send.
Pro přepínání mezi zdrojovým textem a návrhem slouží tlačítka Source a Design u horního okraje okna.
public void send (String s) { jTextArea1.append (s + "\n"); } private void jButton1ActionPerformed (java.awt.event.ActionEvent evt) { boolean b = jCheckBox1.isSelected(); int n = jSlider1.getValue(); String s = jTextField1.getText(); send ("checkbox: " + b); send ("slider: " + n); send ("text box: " + s); send (""); }
Před spuštěním nejspíše odstraňte introduction.Introduction.java a ponechte introduction.MainWindow.java
Proč jsem hlavní třídu vytvářel ? Aby mi vznikl balíček introduction a já ho nemusel vytvářet.
Nyní můžeme program spustit zeleným trojúhelníkem:
Zdrojový text nalezneme na https://gitlab.fjfi.cvut.cz/culikzde/java-priklady/
Zkuste Download, to je tlačítko s ikonkou a bez textu vlevo od tlačítka Clone
Zdrojový text celého programu
package introduction; public class MainWindow extends javax.swing.JFrame { public MainWindow() { initComponents(); } private void initComponents() { jCheckBox1 = new javax.swing.JCheckBox(); jTextField1 = new javax.swing.JTextField(); jSlider1 = new javax.swing.JSlider(); /* ... */ jCheckBox1.setText("jCheckBox1"); jTextField1.setText("abc"); jTextArea1.setColumns(20); jTextArea1.setRows(5); jScrollPane1.setViewportView(jTextArea1); jButton1.setText("jButton1"); jButton1.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jButton1ActionPerformed(evt); } }); jLabel1.setText("jTextField1"); jLabel2.setText("jSlider1"); jLabel3.setText("jTextArea1"); /* ... */ } public void send (String s) { jTextArea1.append (s + "\n"); } private void jButton1ActionPerformed (java.awt.event.ActionEvent evt) { boolean b = jCheckBox1.isSelected(); int n = jSlider1.getValue(); String s = jTextField1.getText(); send ("checkbox: " + b); send ("slider: " + n); send ("text box: " + s); send (""); } public static void main(String args[]) { /* Create and display the form */ java.awt.EventQueue.invokeLater(new Runnable() { public void run() { new MainWindow().setVisible(true); } }); } // Variables declaration - do not modify private javax.swing.JButton jButton1; private javax.swing.JCheckBox jCheckBox1; private javax.swing.JSlider jSlider1; private javax.swing.JTextArea jTextArea1; private javax.swing.JTextField jTextField1; /* ... */ // End of variables declaration }
Balíčky
Zdrojové texty náleží do balíčků (packages), aby nedocházelo ke konfliktům identifikátorů.
Obvykle se používají doménová jména počínaje nejvyšší doménou, např. cz.cvut.fjfi
Na nižších úrovních jednotlivé organizace zavádějí další balíčky, např. cz.cvut.fjfi.sos.uzivatelske_jmeno.jmeno_projektu
Je zvykem jména balíčků začínat malým písmenem.
Náš příklad má ne zcela vhodné jmého balíčku introduction.
package introduction;
Zdrojové texty, které nezačínají klíčovým slovem package jsou v takzvaném anonymním balíčku (, který je obvykle zobrazován v kořeni stromu).
( Pokud máme balíčky a a a.b, balíček a nemá žándé zvýhodnění při přístupu k balíčku a.b )
Třídy
Za názvem balíčku mohou následovat importy a deklarace tříd.
Java na globální úrovni nedovoluje deklarace funkcí nebo proměnných (k tomu lze použít statické funkce a proměnné ve třídách)
Naše třída se jmenuje MainWindow, je dostupná i z jiných balíčků (public) a je rozšířením standardní třídy JFrame z balíčku javax.swing
public class MainWindow extends javax.swing.JFrame
Import
Pokud nechceme uvádět plná jména i s balíčky, použijeme import.
package introduction; import javax.swing.JFrame; public class MainWindow extends JFrame
nebo importujeme všechny třídy z javax.swing (nikoliv však vnořené balíčky)
package introduction; import javax.swing.*; public class MainWindow extends JFrame
Identifikátory
Identifikátory začínají písmenem nebo podtržítkem a poté mohou následovat písmena, podtržení a číslice.
Rozlišují se malá a velká písmena.
Jako písmeno můžeme používat libolvolná písmena z unicodu tedy písmena s diakritikou nebo národní abecedy.
Konstruktor
Konstruktory jso metody (funkce deklarované uvnitř třídy), které se jmenují stejně jako třída.
Slouží k inicializaci nově vznikých instancí.
public MainWindow () { initComponents (); }
public znamená, že konstruktor je povoleno volat i vně třídy
( Uvidíme i privátní konstruktory, které lze volat jen z jiných konstruktorů ve stejné třídě. )
Metody
Překladač nejprve přečte deklarace všch proměnných a hlavičky všech metod ve třídě.
A potom při dalším průchodu čte těla metod.
Díky tomu může initComponents používat identifikátory deklarované až dále ve třídě.
( Ale nic takového neplatí pro lokální proměnné. )
Např. v metodě initComponents používáme jCheckBox1 deklarovaný až na konci třídy.
Ve zmíněné metodě initComponents vidíme, že identikátory jako jButton1 jsou odkazy (ukazatele), do kterých musí být uloženy odkazy na nově vytvořené prvky.
jCheckBox1 = new javax.swing.JCheckBox (); jTextField1 = new javax.swing.JTextField (); jSlider1 = new javax.swing.JSlider ();
new vytváří novou instanci a pokud její kontruktor nemá žádné parametry, musí následovat prázdné kulaté závorky
Metoda initComponents je volaná z konstruktoru naší třídy MainWindow.
Vývojové prostředí NetBeans ji schovává před programátormem, nedovoluje editovat a zapisuje do ní příkazy odpovídavící návrhu okna pomocí myši.
jCheckBox1.setText("jCheckBox1"); jTextArea1.setColumns(20); jTextArea1.setRows(5); jScrollPane1.setViewportView(jTextArea1);
Pro nás může být initComponents zdrojem zajímavých informací.
Například zkuste nastavit velikost a barvupísma některého prvku a v initComponents naleznete:
jButton1.setFont (new java.awt.Font("Nimbus Roman", 0, 24)); jButton1.setForeground (new java.awt.Color(51, 51, 255)); jButton1.setText ("jButton1");