import javax.swing.SwingUtilities;
import javax.swing.JFrame;
import javax.swing.*;
import javax.imageio.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.JPanel;
import javax.swing.BorderFactory;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.io.*;
public class provaCaricamentoImmagine {
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
createAndShowGUI();
}
});
}
private static void createAndShowGUI() {
/*
System.out.println("Created GUI on EDT? "+
SwingUtilities.isEventDispatchThread());
*/
// 1 una jframe è una finestra
// 2 l'argomento del cotruttore è il titolo della finestra
JFrame f = new JFrame("Swing Paint Demo");
JFrame f1 = new JFrame("altra roba");
// 3 si stabilisce cosa debba fare il programma quando si clicca sulla finestra
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// creo due oggetti di classe mypanel
// un pannello è un contenitore
MyPanel p1 = new MyPanel();
MyPanel p2 = new MyPanel();
MyPanel p3 = new MyPanel1();
MyPanel2 p4 = new MyPanel2(f1);
// 4 per aggiungere pannelli ad una finestra ho bisogno di prendere il suo pannello (pane) del contenuto (content)
Container c = f.getContentPane();
Container c1 = f1.getContentPane();
// 5 aggiungiamo i pannelli con add
// i pannelli, che sono rettangoli
// vengono disposti seguendo
// un organizzatore di contenuto (LayoutManager)
// ogni tipo di contenitore ne ha uno
// per le frame si chiama BorderLayout
// divide lo spazio disponibile in cinque parti individuate
// con le stringhe "Center" e con i punti cardinali
c.add(p1, "North");
p2.add(p3);
c.add(p2, "South");
c1.add(p4, "Center");
/*
c.add(new MyPanel(),"North" );
c.add(new MyPanel(),"Center");
c.add(new MyPanel(),"East");
c.add(new MyPanel(),"West");
c.add(new MyPanel(),"South");
*/
// 6 il metodo impacchetta la finestra in modo tale che contenga gli elementi aggiunti
// determina una chiamata ad un metodo che vedremo nel seguito chiamato getPreferredSize
f.pack();
f1.pack();
// 7 rende visibile la finestra
f.setVisible(true);
f1.setVisible(true);
}
}
class MyPanel extends JPanel {
private int numPaintJobs = 0;
public MyPanel() {
// la classe JPanel ha un metodo chiamato setBorder
// il parametro è il tipo di bordo
setBorder(BorderFactory.createLineBorder(Color.black));
// i colori sono oggetti di classe Color, black è un attributo
int i = (int)(Math.random()*3);
if (i == 1) setBackground(Color.white);
if (i == 2) setBackground(Color.red);
if (i == 0) setBackground(Color.yellow);
}
public Dimension getPreferredSize() {
return new Dimension(250,200);
}
// la parte grafica di un pannelo deve essere contenuta
// nella ridefinizione del metodo paintCom po nent
public void paintComponent(Graphics g) {
super.paintComponent(g);
// disegna un testo in una posizione casuale
// drawString disegna un testo
g.drawString("This is my custom Panel!",(int)((Math.random()*250)%150),(int)((Math.random()*250)%150));
int i = (int)(Math.random()*3);
if (i == 1) setBackground(Color.white);
if (i == 2) setBackground(Color.red);
if (i == 0) setBackground(Color.yellow);
}
}
class MyPanel1 extends MyPanel{
Image imm;
public Dimension getPreferredSize() {
return new Dimension(100,100);
}
public void paintComponent(Graphics g){
super.paintComponent(g);
try{
imm = ImageIO.read(new File("prova.jpg"));
}
catch(Exception e){
System.out.println("caricamento immagine");
}
Graphics2D g2 = (Graphics2D) g;
g2.drawImage(imm, 0,0,this);
g2.setColor(Color.WHITE);
g2.drawString("Mario!",
(int)((Math.random()*100)%50),
(int)((Math.random()*100)%50));
}
}
class MyPanel2 extends JPanel{
public Dimension getPreferredSize() {
return new Dimension(250,200);
}
JFrame surj;
public MyPanel2(JFrame j){
surj = j;
setBorder(BorderFactory.createLineBorder(Color.black));
}
Image imm;
public void paintComponent(Graphics g){
super.paintComponent(g);
try{
imm = ImageIO.read(new File("prova.jpg"));
}
catch(Exception e){
System.out.println("caricamento immagine");
}
Graphics2D g2 = (Graphics2D) g;
g2.drawImage(imm, 0,0,this);
}
}