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");
 
java/intro.txt · Last modified: 2020/10/07 13:49 by 88.103.111.44
 
Recent changes RSS feed Creative Commons License Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki