English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Corso di base di Swing in Java: esempi di codice grafico

Corso di base Java Swing con esempi di codice grafico

Diverso da multi-threading, generics e altri, Swing si concentra principalmente sull'uso.

Di seguito ci sono principalmente codice e commenti, con poca conversazione.

(一)Struttura di base

package Swing;
import java.awt.*;
import javax.swing.*;
/**
 * 
 * @author QuinnNorris
 * Struttura di base
 */
public class FrameTest {
  /**
   * @param args
   */
  public static void main(String[] args) {
    // TODO método stub generado automáticamente
    // Iniciar un hilo, todos los componentes Swing deben ser configurados por el hilo de dispatch de eventos, el hilo transferirá el control del ratón y el teclado a los componentes de la interfaz de usuario.
    EventQueue.invokeLater(new Runnable() {
      // Clase interna anónima, una instancia del interfaz Runnable, que implementa el método run
      public void run() {
        SimpleFrame frame = new SimpleFrame();
        // Crear un objeto de la clase SimpleFrame definida por nosotros, para poder llamar al método constructor
        frame.setExtendedState(Frame.MAXIMIZED_BOTH);
        // Massimizzare la finestra
        // Altri attributi opzionali: Frame.NORMAL ICONIFIED MAXIMIZED_HORIZ MAXIMIZED_VERT
        // MAXIMIZED_BOTH
        frame.setTitle("Christmas");
        // Impostare il titolo della finestra
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        // Selezionare l'operazione da eseguire quando l'utente chiude la finestra, a volte è necessario nascondere la finestra e non uscire direttamente, in questo caso si utilizza questo metodo
        frame.setVisible(true);
        // Hacer visible la ventana, de modo que podamos agregar contenido antes de que el usuario la vea por primera vez
      }
    });
  }
  // Quando il main termina, il programma non termina, ma termina il thread principale, fino a quando tutte le finestre non vengono chiuse o viene chiamato System.exit per terminare il programma
}
class SimpleFrame extends JFrame {
  public SimpleFrame() {
    Toolkit kit = Toolkit.getDefaultToolkit();
    // Modificare la posizione della finestra sullo schermo, cambiare la dimensione della finestra
    // La classe Toolkit contiene molti metodi di interazione con la finestra locale
    Dimension screenSize = kit.getScreenSize();
    // Il metodo di obtainScreenSize del Toolkit restituisce un oggetto della classe Dimension
    setSize((int) (screenSize.getWidth()), (int) (screenSize.getHeight()));
    // setBounds(0,0,(int)(screenSize.getWidth()),(int)(screenSize.getHeight()));
    // Definire la posizione e la dimensione della finestra
    // setLocation(0,0); Posizionare la finestra rispetto all'angolo superiore sinistro
    // setLocationByPlatform(true); Lasciare che il sistema di finestra controlli la posizione della finestra, con un piccolo spostamento rispetto all'ultima finestra
    // Sostituire l'icona della finestra con un'immagine
    Image img = new ImageIcon("D:/icon.png").getImage();
    setIconImage(img);
  }
}

Risultato di output: una finestra di scorrimento che riempie l'intero schermo, la barra del titolo si chiama Christmas, il grafico è un'immagine caricata manualmente.

(Due) Output di testo

package Swing;
import java.awt.*;
import javax.swing.*;
/**
 * 
 * @author QuinnNorris
 * Output di testo
 */
public class HelloWorld {
  /**
   * @param args
   */
  public static void main(String[] args) {
    // TODO método stub generado automáticamente
    // Avviare un thread, tutti i componenti Swing devono essere configurati dalla thread di distribuzione degli eventi, il thread trasferisce il controllo del mouse e delle pressioni dei pulsanti ai componenti dell'interfaccia utente
    EventQueue.invokeLater(new Runnable() {
      // Clase interna anónima, una instancia del interfaz Runnable, que implementa el método run
      public void run() {
        JFrame frame = new HelloWorldFrame();
        // HelloWorldFrame è definito di seguito, eredita JFrame, utilizza il costruttore
        frame.setTitle("HelloWrold");
        // Establecer el título
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        // Selezionare l'operazione da eseguire quando l'utente chiude la finestra, a volte è necessario nascondere la finestra e non uscire direttamente, in questo caso si utilizza questo metodo
        frame.setVisible(true);
        // Hacer visible la ventana, de modo que podamos agregar contenido antes de que el usuario la vea por primera vez
      }
    });
  }
}
// Scrivere una classe che eredita JFrame, il nostro lavoro avviene qui
class HelloWorldFrame extends JFrame {
  public HelloWorldFrame() {
    add(new HelloWorldComponent());
    // aggiungiamo un'istanza di una sottoclasse implementata di JComponent
    pack();
    // chiamiamo la dimensione preferita del componente framework, o possiamo sostituirla con il metodo SetSize
  }
}
class HelloWorldComponent extends JComponent {
  public static final int MESSAGE_X = 75;
  public static final int MESSAGE_Y = 100;
  private static final int DEFAULT_WIDTH = 300;
  private static final int DEFAULT_HEIGHT = 200;
  /**
   * Abbiamo sovrascritto questo per scrivere il contenuto
   * 
   * @param g
   *      L'oggetto Graphics contiene le impostazioni utilizzate per disegnare immagini e testo
   */
  public void paintComponent(Graphics g) {
    g.drawString("Hello World!", MESSAGE_X, MESSAGE_Y);
    // Parametro: contenuto da scrivere, il primo carattere della stringa è posizionato a 75 pixel da sinistra, il primo carattere è posizionato a 100 pixel dall'alto.
  }
  /**
   * Abbiamo sovrascritto questo metodo per rappresentare la dimensione del componente di questa classe
   * 
   * @return Restituisce la dimensione che il componente di questa classe dovrebbe avere
   */
  public Dimension getPreferredSize() {
    return new Dimension(DEFAULT_WIDTH, DEFAULT_HEIGHT);
    //Restituisce un oggetto Dimension che rappresenta la dimensione di questo componente
  }
}

Risultato di output: una finestra piccola chiamata HelloWrold situata nell'angolo in alto a sinistra, con il testo "Hello World!" al centro della finestra.

(Tre) Stampa l'immagine

package Swing;
import java.awt.EventQueue;
import javax.swing.*;
import java.awt.*;
import java.awt.geom.*;
/**
 * 
 * @author QuinnNorris
 * Stampa l'immagine
 */
public class DrawTest {
  /**
   * @param args
   */
  public static void main(String[] args) {
    // TODO método stub generado automáticamente
    // Iniciar un hilo, todos los componentes Swing deben ser configurados por el hilo de dispatch de eventos, el hilo transferirá el control del ratón y el teclado a los componentes de la interfaz de usuario.
    EventQueue.invokeLater(new Runnable()
    {
      // Clase interna anónima, una instancia del interfaz Runnable, que implementa el método run
      public void run(){
        JFrame frame = new DrawFrame();
        // Crear un objeto de la clase SimpleFrame definida por nosotros, para poder llamar al método constructor
        frame.setTitle("DrawTest");
        // Establecer el título
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        // Elegir la acción que se realiza cuando el usuario cierra el cuadro, a veces es necesario ocultar la ventana y no salir directamente, se usa este método
        frame.setVisible(true);
        // Hacer visible la ventana, de modo que podamos agregar contenido antes de que el usuario la vea por primera vez
      }
    });
  }
}
class DrawFrame extends JFrame
{
  public DrawFrame(){}
    add(new DrawComponent());
    // aggiungiamo un'istanza di una sottoclasse implementata di JComponent
    pack();
    // chiamiamo la dimensione preferita del componente framework, o possiamo sostituirla con il metodo SetSize
  }
}
class DrawComponent extends JComponent
{
  private static final int DEFAULT_WIDTH = 400;
  private static final int DEFAULT_HEIGHT = 400;
  /**
   * abbiamo sovrascritto questo per stampare l'immagine
   * 
   * @param g
   *      L'oggetto Graphics è la classe genitore che utilizziamo per Graphics2D
   */
  public void paintComponent(Graphics g){
    Graphics2D g2 = (Graphics2D)g;
    // istanziamo un oggetto Graphics2D, che è una sottoclasse di Graphics2D
    double leftX = 100;
    double topY = 100;
    double width = 200;
    double height = 150;
    // impostiamo le quattro proprietà del rettangolo
    Rectangle2D rect = new Rectangle2D.Double(leftX,topY,width,height);
    // Crea un oggetto Rectangle2D, che eredita l'interfaccia Sharp
    // Double è una delle classi statiche interne, dobbiamo impostare i parametri in Double durante l'inizializzazione
    g2.draw(rect);
    // Passa un'istanza che implementa l'interfaccia Sharp e disegna sul canvas
    Ellipse2D ellipse = new Ellipse2D.Double();
    // crea un'istanza di un'ellisse
    ellipse.setFrame(rect);
    // le classi ellisse e rettangolo sono sorelle perché hanno lo stesso modo di giudicare i confini
    // qui utilizziamo rect per descrivere l'ellisse (attraverso il rettangolo circoscritto)
    g2.draw(ellipse);
    // Passa un'istanza che implementa l'interfaccia Sharp e disegna sul canvas
    g2.draw(new Line2D.Double(leftX, topY, leftX+width, topY+height));
    // disegna una retta sulla superficie del canvas
    double centerX = rect.getCenterX();
    double centerY = rect.getCenterY();
    double radius = 150;
    // definisci le coordinate del centro e il raggio del cerchio
    Ellipse2D circle = new Ellipse2D.Double();
    // crea un'istanza di un cerchio
    circle.setFrameFromCenter(centerX, centerY, centerX+radius, centerY+radius);
    // Imposta coordinate e raggio
    g2.draw(circle);
    // Disegna un cerchio sul canvas
  }
  /**
   * Abbiamo sovrascritto questo metodo per rappresentare la dimensione del componente di questa classe
   * 
   * @return Restituisce la dimensione che il componente di questa classe dovrebbe avere
   */
  public Dimension getPreferredSize(){
    return new Dimension(DEFAULT_WIDTH,DEFAULT_HEIGHT);
    //Restituisce un oggetto Dimension che rappresenta la dimensione di questo componente
  }
}

Risultato di output: nella finestra in alto a sinistra c'è un ellisse, circondato da un rettangolo esterno, con una linea rettilinea da alto a sinistra a basso a destra, con un cerchio di raggio 150 pixel dal centro del rettangolo.

(四)Colorazione delle Grafiche

Rectangle2D rect = new Rectangle2D.Double(leftX,topY,width,height);
// Crea un oggetto Rectangle2D, che eredita l'interfaccia Sharp
// Double è una delle classi statiche interne, dobbiamo impostare i parametri in Double durante l'inizializzazione
g2.setColor(Color.BLUE);
// Imposta un colore di riempimento per l'oggetto g2, che influisce sul colore della linea
g2.fill(rect);
// Riempie il colore selezionato nel grafico rappresentato da rect
g2.draw(rect);
// Passa un'istanza che implementa l'interfaccia Sharp e disegna sul canvas

Senza modificare altre parti del codice precedente, inserisci queste due righe di codice (tra le righe 1 e 4 del codice originale). Otterrai l'effetto di colorazione.

Risultato di output: una rettangolo blu al centro, con una linea blu circolare di raggio 150 pixel dal centro del rettangolo.

(五)Caratteri Speciali

package Swing;
import javax.swing.*;
import java.awt.*;
import java.awt.font.*;
import java.awt.geom.*;
/**
 * 
 * @author QuinnNorris Caratteri Speciali
 */
public class FontTest {
  /**
   * @param args
   */
  public static void main(String[] args) {
    // TODO método stub generado automáticamente
    // Iniciar un hilo, todos los componentes Swing deben ser configurados por el hilo de dispatch de eventos, el hilo transferirá el control del ratón y el teclado a los componentes de la interfaz de usuario.
    EventQueue.invokeLater(new Runnable() {
      // Clase interna anónima, una instancia del interfaz Runnable, que implementa el método run
      public void run() {
        JFrame frame = new FontFrame();
        // Crear un objeto de la clase SimpleFrame definida por nosotros, para poder llamar al método constructor
        frame.setTitle("FontTest");
        // Establecer el título
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        // Elegir la acción que se realiza cuando el usuario cierra el cuadro, a veces es necesario ocultar la ventana y no salir directamente, se usa este método
        frame.setVisible(true);
        // Hacer visible la ventana, de modo que podamos agregar contenido antes de que el usuario la vea por primera vez
      }
    });
  }
}
class FontFrame extends JFrame {
  public FontFrame() {
    add(new FontComponent());
    // Añadir una instancia de una subclase de JComponent
    pack();
    // Llamata preferente del componente de framework o podemos usar el método SetSize para reemplazarlo
  }
}
class FontComponent extends JComponent {
  private static final int DEFAULT_WIDTH = 300;
  private static final int DEFAULT_HEIGHT = 200;
  /**
   * Abbiamo sovrascritto questo per fare alcuni lavori
   * 
   * @param g
   *      L'oggetto Graphics è la classe genitore che utilizziamo per Graphics2D
   */
  public void paintComponent(Graphics g) {
    Graphics2D g2 = (Graphics2D) g;
    // Istanzio un oggetto della classe Graphics2D, che è un sottogetto di Graphics2D
    String message = "Hello World!";
    // Scrivi il testo che dobbiamo manipolare
    Font f = new Font("Dialog", Font.BOLD, 36);
    // Crea un tipo di font, i parametri includono il tipo di famiglia, il tipo di stile e la dimensione
    // Può anche essere chiamato tramite un metodo speciale per caricare il pacchetto di font locale
    g2.setFont(f);
    // Imposta il font f nel g2
    FontRenderContext context = g2.getFontRenderContext();
    // Attraverso la chiamata al metodo, ottenere l'oggetto di descrizione delle proprietà del font del dispositivo di schermo
    Rectangle2D bounds = f.getStringBounds(message, context);
    // Il metodo getStringBounds restituisce un rettangolo che avvolge la stringa
    double x = (DEFAULT_WIDTH - bounds.getWidth()) / 2;
    // Il metodo bounds.getWidth() può ottenere la larghezza della stringa
    double y = (DEFAULT_HEIGHT - bounds.getHeight()) / 2;
    // Il metodo bounds.getHeight() può ottenere l'altezza della stringa
    double ascent = -bounds.getY();
    // Ottieni l'ascensione del carattere
    double baseY = y + ascent;
    // Posizione della linea di base del testo
    g2.drawString(message, (int) x, (int) y);
    // Imposta la posizione della stringa
    g2.setPaint(Color.LIGHT_GRAY);
    // Imposta il colore della linea su grigio chiaro
    g2.draw(new Line2D.Double(x, baseY, x + bounds.getWidth(), baseY));
    // Traccia una linea orizzontale sotto la linea di base del testo
    Rectangle2D rect = new Rectangle2D.Double(x, y, bounds.getWidth(),
        bounds.getHeight());
    g2.draw(rect);
  }
  /**
   * Abbiamo sovrascritto questo metodo per rappresentare la dimensione del componente di questa classe
   * 
   * @return Restituisce la dimensione che il componente di questa classe dovrebbe avere
   */
  public Dimension getPreferredSize() {
    return new Dimension(DEFAULT_WIDTH, DEFAULT_HEIGHT);
    //Restituisce un oggetto Dimension che rappresenta la dimensione di questo componente
  }
}

Il risultato: nel centro della finestra c'è il testo "Hello World", circondato da un rettangolo grigio, diviso da una linea orizzontale alla base.

(六)Añadir imagen

package Swing;
import javax.swing.*;
import java.awt.*;
/**
 * 
 * @author QuinnNorris Añadir imagen
 */
public class ImageTest {
  /**
   * @param args
   */
  public static void main(String[] args) {
    // TODO método stub generado automáticamente
    // Iniciar un hilo, todos los componentes Swing deben ser configurados por el hilo de dispatch de eventos, el hilo transferirá el control del ratón y el teclado a los componentes de la interfaz de usuario.
    EventQueue.invokeLater(new Runnable() {
      // Clase interna anónima, una instancia del interfaz Runnable, que implementa el método run
      public void run() {
        JFrame frame = new ImageFrame();
        // Crear un objeto de la clase SimpleFrame definida por nosotros, para poder llamar al método constructor
        frame.setTitle("ImageTest");
        // Establecer el título
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        // Elegir la acción que se realiza cuando el usuario cierra el cuadro, a veces es necesario ocultar la ventana y no salir directamente, se usa este método
        frame.setVisible(true);
        // Hacer visible la ventana, de modo que podamos agregar contenido antes de que el usuario la vea por primera vez
      }
    });
  }
}
class ImageFrame extends JFrame {
  public ImageFrame() {
    add(new ImageComponent());
    // Añadir una instancia de una subclase de JComponent
    pack();
    // Llamata preferente del componente de framework o podemos usar el método SetSize para reemplazarlo
  }
}
class ImageComponent extends JComponent {
  private static final int DEFAULT_WIDTH = 300;
  private static final int DEFAULT_HEIGHT = 200;
  private Image image;
  /**
   * Costruttore di ImageComponent, utilizzato per istanziare l'immagine
   */
  public ImageComponent(){
    image = new ImageIcon("D:/image.jpg").getImage();
    //Ottieni l'immagine tramite il percorso
  }
  /**
   * Abbiamo sovrascritto questo per fare alcuni lavori
   * 
   * @param g
   *      
   */
  public void paintComponent(Graphics g) {
    if(image == null ) return;
    //Se l'immagine non è corretta, torna direttamente per evitare errori
    g.drawImage(image, 0,0,null);
    //Mostra l'immagine sul canvas
  }
  /**
   * Abbiamo sovrascritto questo metodo per rappresentare la dimensione del componente di questa classe
   * 
   * @return Restituisce la dimensione che il componente di questa classe dovrebbe avere
   */
  public Dimension getPreferredSize() {
    return new Dimension(DEFAULT_WIDTH, DEFAULT_HEIGHT);
    //Restituisce un oggetto Dimension che rappresenta la dimensione di questo componente
  }
}

Risultato di output: posiziona l'immagine aggiunta nella parte superiore sinistra del riquadro di disegno.

Grazie per la lettura, speriamo che possa aiutare tutti, grazie per il supporto di questo sito!

Dichiarazione: il contenuto di questo articolo è stato tratto da Internet, il copyright spetta ai rispettivi autori, il contenuto è stato contribuito e caricato autonomamente dagli utenti di Internet, questo sito non detiene il diritto di proprietà, non è stato editato manualmente e non assume responsabilità legali correlate. Se trovi contenuti sospetti di violazione del copyright, ti preghiamo di inviare una e-mail a notice#oldtoolbag.com (sostituisci # con @) per segnalare il problema e fornire prove pertinenti. Una volta verificata, questo sito rimuoverà immediatamente il contenuto sospetto di violazione del copyright.

Ti potrebbe interessare