Come creare un'app GUI in Java

Jan 31 2023
Panoramica In java, gli swing vengono utilizzati per creare un'applicazione GUI. Ha caratteristiche diverse ed è comunemente usato per creare applicazioni GUI in java.

Panoramica

In java, gli swing vengono utilizzati per creare un'applicazione GUI. Ha caratteristiche diverse ed è comunemente usato per creare applicazioni GUI in java. In questo articolo tratteremo tutto sulla libreria swing in Java.

Altalena Java

Swing è sviluppato in puro java. I componenti swing possono avere lo stesso aspetto su tutte le piattaforme e offrire un aspetto collegabile. I componenti dell'altalena sono leggeri.

Esempio:

Un programma Java per visualizzare una creatività e visualizzare un frame

importare javax.swing.*;

la classe F1 estende JFrame{

F1() {

setDimensione(200,200);

setTitle("GUI DIMOSTRATIVA");

setPosizione(100,200);

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

setVisibile(true);

}

public static void main(String args[]){

F1 f= nuovo F1();

}

}

Produzione:

javac F1.java

Java F1

Gerarchia dei contenitori

Contenitore di primo livello:

  • Luogo in cui altri componenti dell'altalena possono dipingersi
  • Per esempio. JFrame, JDialog, JApplet
  • Semplifica il posizionamento dei componenti atomici
  • Ad esempio, JPanel, JSplitPane, JTabbedPane
  • Componenti autosufficienti che presentano informazioni e ricevono input dall'utente
  • Ad esempio, JButton, JLabel, JComboBox, JTextField, JTable
  • JButton è un'implementazione di un pulsante "push".
  • I pulsanti possono essere configurati e in una certa misura controllati dalle azioni
  • JOptionPane semplifica la visualizzazione di una finestra di dialogo standard che richiede agli utenti un valore o li informa di qualcosa.
  • Sebbene la classe possa sembrare complessa a causa dell'elevato numero di metodi, quasi tutti gli usi di questa classe sono chiamate di una riga a uno dei metodi statici mostrati di seguito:

Come una classe può avere variabili e metodi come membri, la classe può anche contenere un'altra classe chiamata classe annidata.

Il concetto di classi interne è stato introdotto in java 1.1

Ci sono diversi vantaggi nell'usare le classi interne:

  • Rendi il tuo codice più leggibile
  • Consentire l'incapsulamento delle classi di utilità all'interno della classe che lo utilizza
  • Semplificare il processo di scrittura di una classe, incoraggiando così gli sviluppatori a essere più orientati agli oggetti.

I tipi di classe interna sono i seguenti:

  • La classe interna del membro
  • Classe interna statica
  • La classe interna locale
  • La classe anonima

Gestione degli eventi utilizzando la classe interna del membro:

importare javax.swing.*;

importa java.awt.*;

importare java.awt.event.*;

la classe M1 estende JFrame

{

Contenitore c;

JTasto b1, b2;

la classe L1 implementa ActionListener

{

public void actionPerformed(ActionEvent ae){

if(ae.getSource()==b1)

{

JOptionPane.showMessageDialog(c, “Hai fatto clic sul pulsante 1”);

}

if(ae.getSource()==b2)

{

JOptionPane.showMessageDialog(c,”Hai fatto clic sul pulsante 2”);

}

}

}

M1()

{

c=getContentPane();

c.setLayout(nuovo FlowLayout());

b1=nuovo JButton(“Click 1”);

b2= nuovo JButton(“Click 2”);

c.add(b1);

c.add(b2);

L1 a= nuovo L1();

b1.addActionListener(a);

b2.addActionListener(a);

}

public static void main(String args[]){

M1 f= nuovo M1();

f.setSize(200,200);

f.setTitle("Clic del pulsante");

f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

f.setVisible(true);

}

}

Gestori del layout

Il gestore del layout di Java determina come verranno disposti i componenti quando vengono aggiunti al frame. Il pacchetto AWT include le seguenti classi di layout:

  • Layout di flusso
  • Disposizione bordo
  • Layout della griglia

Layout di flusso

Un layout di flusso dispone i componenti in un flusso direzionale, proprio come le righe di testo in un paragrafo, fino a quando non c'è più spazio, quindi nella riga successiva.

Per impostazione predefinita, i componenti sono centrati. Il programmatore può specificare l'allineamento utilizzando uno dei seguenti argomenti con il costruttore:

  • FlowLayout.LEFT
  • FlowLayout.CENTER
  • FlowLayout.DESTRA

Un layout di bordo delinea un contenitore, disponendo e ridimensionando i suoi componenti per adattarli a cinque regioni: nord, sud, est, ovest e centro.

Ogni regione non può contenere più di un componente ed è definita da una costante corrispondente: NORTH, SOUTH, EAAST, WEST e CENTER.

Il programmatore può specificare la regione utilizzando quanto segue nel metodo add:

  • add(“Nord”, b1);
  • add(“Sud”,b2);
  • add(“Est”,b3);
  • add(“Ovest”,b4);
  • add(“Centro”,b5);
  • add(BorderLayout.NORTH,b1);
  • add(BorderLayout.SOUTH,b2);
  • add(BorderLayout.EAST,b3);
  • add(BorderLayout.WEST,b4);
  • add(BorderLayout.CENTER,b5);

Nota2 : la compilazione fallisce se il nome della costante non è maiuscolo come mostrato.

Nota3 : Anche sopra può essere combinato.

JLabel

JLabel è un'area di visualizzazione per una breve stringa di testo o un'immagine, o entrambe. Un'etichetta non reagisce agli eventi di input.

Programma:

importa java.awt.*;

importare javax.swing.*;

importare java.awt.event.*;

la classe S2 estende JFrame{

Contenitore c;

JTextField txt1;

JPulsante btn1;

JLabel lbl1, lbl2;

S2(){

c=getContentPane();

c.setLayout(nuovo FlowLayout());

lbl1= new JLabel(“Inserisci un numero”);

txt1= nuovo JTextField(10);

btn1= nuovo JButton(“Risposta”);

lbl2= nuova JLabel();

c.add(lbl1);

c.add(txt1);

c.add(btn1);

c.add(lbl2);

btn1.addActionListener(new L2());

}

public static void main(String args[]){

S2 frm= nuovo S2();

frm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

frm.setSize(250,150);

frm.setTitle("Square Finder");

frm.setVisible(true);

}

la classe L2 implementa ActionListener{

public void actionPerformed(ActionEvent ae){

Tentativo{

int a= Integer.ParseInt(txt1.getText());

float s= a*a;

lbl2.setText(“Quadrato=”+s);

}

catch(NumberFormatException e){

JOptionPane.showMessageDialog(c,”Inserisci numero intero”);

txt1.setText(“ “);

txt1.requestFocus();

}

}

}

}

Gestione degli eventi della tastiera

Gestione degli eventi della tastiera

Programma:

importa java.awt.*;

importare javax.swing.*;

importare java.awt.event.*;

la classe S7 estende JFrame{

Contenitore c;

JTextField txt1;

JPulsante btn1;

JEtichetta lbl1,lbl2;

S7(){

c=getContentPane();

c.setLayout(nuovo FlowLayout());

lbl1= new JLabel(“Inserisci un numero”);

txt1= nuovo JTextField(10);

btn1= nuovo JButton(“Risposta”);

lbl2= nuova JLabel();

c.add(lbl1);

c.add(txt1);

c.add(btn1);

c.add(lbl2);

btn1.addActionListener(new L2());

btn1.addKeyListener(nuovo L3());

}

public static void main(String args[]){

S7 frm= nuovo S7();

frm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

frm.setSize(250,150);

frm.setTitle("Square Finder");

frm.setVisible(true);

}

la classe L3 implementa KeyListener

{

public void keyPressed(KeyEvent ke)

{

if(ke.getKeyCode()==KeyEvent.VK_ENTER);

Tentativo{

int a= Integer.parseInt(txt1.getText());

float s= a*a;

lbl2.setText('Quadrato='+s');

}

catch(NumberFormatException e){

JOptionPane.showMessageDialog(c,”Inserisci numero intero”);

txt1.setText(“”);

txt1.requestFocus();

lbl2.setText(“”);

}

}

}

public void keyReleased(KeyEvent ke){}

public void keyTyped(KeyEvent ke){}

}

la classe L2 implementa ActionListener{

public void actionPerformed(ActionEvent ae){

Tentativo{

int a= Integer.parseInt(txt1.getText());

float s=a*a;

lbl2.setText(“Quadrato=”+s);

}

catch(NumeroFormatoEccezione e){

JOptionPane.showMessageDialog(c,”Inserisci numero intero”);

txt1.setText(“”);

txt1.requestFocus();

lbl2.setText(“”);

}

}

}

}

Gestione degli eventi di Windows

Gestione degli eventi di Windows

Programma :

importa java.awt.*;

importare javax.swing.*;

importare java.awt.event.*;

la classe S8 estende JFrame{

Contenitore c;

JTextField txt1;

JPulsante btn1;

JEtichetta lbl1,lbl2;

S8(){

c=getContentPane();

c.setLayout(nuovo FlowLayout());

lbl1= new JLabel(“Inserisci un numero”);

txt1= nuovo JTextField(10);

btn1= nuovo JButton(“Risposta”);

lbl2= nuova JLabel();

c.add(lbl1);

c.add(txt1);

c.add(btn1);

c.add(lbl2);

btn1.addActionListener(new L2());

btn1.addKeyLisener(new L3());

this.addWindowListener(new L4());

}

public static void main(String args[]){

S8 frm= nuovo S8();

frm.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);

frm.setSize(250,150);

frm.setTitle("Square Finder");

frm.setVisible(true);

}

la classe L4 implementa WindowListener{

public void windowActivated(WindowEvent e){}

public void windowDeactivated(WindowEvent e){}

public void windowOpened(WindowEvent e){

JOptionPane.showMessageDialog(c,”Benvenuti in Square Calculator”);

}

public void windowClosed(WindowEvent e){}

public void windowClosing(WindowEvent e){

int output= JOptionPane.showConfirmDialog(c,”Vuoi uscire”);

if(output==JOptionPane.YES_OPTION){

System.exit(1);

}

}

public void windowIconified(WindowEvent e){}

public void windowDeiconified(WindowEvent e){}

}

la classe L2 implementa ActionListener{

public void actionPerformed(ActionEvent ae){

Tentativo{

int a=Integer.parseInt(txt1.getText());

float s=a*a;

lbl2.setText(“Quadrato=”+s);

}

catch(NumberFormatException e){

JOptionPane.showMessageDialog(c,”Inserisci numero intero”);

txt1.setText(“”);

txt1.requestFocus();

lbl2.setText(“”);

}

}

}

la classe L3 implementa KeyListener{

public void keyPressed(KeyEvent ke){

if(ke.getKeyCode()==KeyEvent.VK_ENTER){

Tentativo{

int a= Integer.parseInt(txt1.getText());

float s=a*a;

lbl2.setText(“Quadrato=”+s);

}

catch(NumberFormatException e){

JOptionPane.showMessageDialog(c,”Inserisci numero intero”);

txt1.setText(“”);

txt1.requestFocus();

lbl2.setText(“”);

}

}

}

public void keyReleased(KeyEvent ke){}

public void keyTyped(KeyEvent ke){}

}

}

Conclusione

Swing è sviluppato in puro java ed è ampiamente utilizzato poiché ha lo stesso aspetto su tutte le piattaforme e offre un aspetto collegabile. Spero che questo articolo ti sia piaciuto, fammi sapere se ci sono feedback. :) ❤️