// BildMedTextGenerator.java

// ett program som skapar och visar en ruta med bild och text,
// och sparar denna ruta


/**********************************************************************

Det här programmet skapar och visar en ruta av typen BildMedTextRuta,
som representerar en ruta med bild och text. Rutan sparas i en fil.

Via ett inmatningsfält kan rutans text justeras. För varje angiven
text, skapas en ny fil (där rutan sparas).

**********************************************************************/


import java.awt.*;       // Graphics, Graphics2D, Color, Font
import java.awt.event.*; // ActionListener, ActionEvent
import javax.swing.*;    // JPanel, JLabel, JTextField, JFrame
import java.io.*;        // File, IOException
import javax.imageio.*;  // ImageIO


// RutaPanel är en panel där en en ruta med bild och text skapas, visas
// och sparas
class RutaPanel extends JPanel
{
	// text i rutan
	private String    text = "J a v a";

	// sätt texten i rutan till en given text
	public void setText (String text)
	{
		this.text = text;
	}

	// rita panelen
    public void paintComponent (Graphics gr)
    {
		// förberedande handlingar
		super.paintComponent (gr);
		this.setBackground (Color.WHITE);
		Graphics2D    g = (Graphics2D) gr;


        // font i rutan
        Font    font = new Font ("Serif", Font.BOLD + Font.ITALIC, 120);

        // bild i rutan
        Bild    bild = new Bild (500, 300);

		// rutan med bild och text
        BildMedTextRuta    textruta = new BildMedTextRuta (
			                    500,   // rutans bredd
			                    300,   // rutans höjd
			                    bild,  // rutans bild
			                    font,  // rutans font
			                    text,  // text i rutan
			                    Color.WHITE, // rutans färg
			                    new Color (220, 20, 54), // textens färg
			                    2,             // ramens tjocklek
			                    Color.LIGHT_GRAY);  // ramens färg


        // visa rutan i den här panelen
        g.drawImage (textruta, null, 45, 25);

        // spara rutan
        try
        {
	        File    fil = new File (text + ".png");
	        // texten i rutan bestämmer filens namn
	        ImageIO.write (textruta, "PNG", fil);
	    }
	    catch (IOException e)
	    {
			System.out.println (e);
		}
	}
}


// en panel där användaren matar in en text, som sedan visas i en ruta
class KontrollPanel extends JPanel
{
	// initiera panelen
	public KontrollPanel ()
	{
		// en panel som innehåller en ruta med bild och text
		final RutaPanel    rutaPanel = new RutaPanel ();

		// ett fält för att mata in rutans text
		JLabel    label = new JLabel ("Text i rutan ");
		final JTextField    inFalt = new JTextField (25);
		JPanel    inPanel = new JPanel ();
		inPanel.add (label);
		inPanel.add (inFalt);
		inFalt.addActionListener (new ActionListener ()
		    {
				public void actionPerformed (ActionEvent e)
				{
					// hämta texten från fältet
					String    text = inFalt.getText ();
					inFalt.setText ("");

					// rita om rutan med nya texten,
					// och spara den
					rutaPanel.setText (text);
					rutaPanel.repaint ();
				}
			} );

        // komponenterna i den här panelen
        this.setLayout (new BorderLayout ());
        this.add (rutaPanel, "Center");
        this.add (inPanel, "South");
	}
}


// BildMedTextGenerator är ett program som visar ett fönster, som
// innehåller en panel med en ruta med bild och text, och ett fält som
// används för att mata in rutans text
class BildMedTextGenerator
{
    public static void main (String[] args)
	{
	    // skapa ett fönster
	    JFrame    frame = new JFrame (" BildMedTextGenerator");
	    frame.setBounds (50, 50, 600, 400);
        frame.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);

	    // skapa en panel, och lägg den i fönstret
	    KontrollPanel    panel = new KontrollPanel ();
	    frame.add (panel);

		// visa fönstret
		frame.setVisible (true);
	}
}


/*----------------------------------------------------------------------

Programmets output

Ett fönster visas, som innehåller en panel med ett inmatningsfält och
en ruta med bild och text. Via inmatningsfältet kan rutans text anges.

----------------------------------------------------------------------*/
