// TextRutaGenerator.java

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


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

Det här programmet skapar och visar en ruta av typen TextRuta, som
representerar en ruta med 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 ruta med text skapas, visas och sparas
class RutaPanel extends JPanel
{
	// text i rutan
	private String    text = "sanningen";

	// 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 textrutan
        Font    font = new Font ("Serif", Font.BOLD + Font.ITALIC, 30);

		// en ruta med text

// bra för kursnamn

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

        font = new Font ("Serif", Font.BOLD + Font.ITALIC, 30);

        TextRuta    textruta = new TextRuta (
			                    500,   // rutans bredd
			                    80,    // rutans höjd
			                    font,  // rutans font
			                    text,  // text i rutan
			                    Color.WHITE, // rutans färg
			                    new Color (220, 20, 54),  // textens färg
			                    0,            // ramens tjocklek
			                    Color.WHITE); // ramens färg

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

// bra för kurskod och antalet poäng

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

        font = new Font ("Serif", Font.BOLD + Font.ITALIC, 18);

        TextRuta    textruta = new TextRuta (
			                    160,   // rutans bredd
			                    40,    // rutans höjd
			                    font,  // rutans font
			                    text,  // text i rutan
			                    Color.WHITE, // rutans färg
			                    new Color (220, 20, 54),  // textens färg
			                    0,            // ramens tjocklek
			                    Color.WHITE); // ramens färg

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

// bra för navigeringsknappar

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

        font = new Font ("SansSerif", Font.PLAIN, 18);

        TextRuta    textruta = new TextRuta (
			                    120,   // rutans bredd
			                    40,    // rutans höjd
			                    font,  // rutans font
			                    text,  // text i rutan
			                    Color.WHITE,  // rutans färg
			                    Color.BLACK,  // textens färg
			                    0,            // ramens tjocklek
			                    Color.WHITE); // ramens färg

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


        // visa textrutan i den här panelen
        g.drawImage (textruta, null, 60, 40);

        // spara textrutan
        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 rutans text
class KontrollPanel extends JPanel
{
	// initiera panelen
	public KontrollPanel ()
	{
		// en panel som innehåller en ruta med 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 textrutan 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");
	}
}


// TextRutaGenerator är ett program som visar ett fönster, som
// innehåller en panel med en ruta med text, och ett fält som
// används för att mata in rutans text
class TextRutaGenerator
{
    public static void main (String[] args)
	{
	    // skapa ett fönster
	    JFrame    frame = new JFrame (" TextRutaGenerator");
	    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 text. Via inmatningsfältet kan rutans text anges.

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