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