GUI - Erstellung

matcho

Mitglied
Hallo Freunde der nächtlichen Programmierung,

ich bin ja mal alles andere als nen großer Java-Fan, muss aber dennoch ne kleine Aufgabe bewältigen und ne Gui für ein Programm zaubern. Nun hab ich nach einigen Tutorials endlich das JMenu fertig. ;)

Java:
package gui;

import javax.swing.*;
import java.awt.event.*;

public class Layout extends JFrame{
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	public Layout()
	{
		super("Computergrafik - ImageMap");
		
		////////////DATEI///////////////////////////////////
		JMenu datei = new JMenu("Datei");

		JMenuItem openItem = new JMenuItem("Öffnen");
		openItem.setMnemonic('o');	//Hotkey o = oeffnen
		datei.add(openItem);
		
		JMenuItem exitItem = new JMenuItem("Beenden");
		exitItem.setMnemonic('x');
		datei.add(exitItem);	//Hotkey x = beenden
		
		//adding action listener to menu items
		openItem.addActionListener(
			new ActionListener(){
				public void actionPerformed(ActionEvent e)
				{
					//GIB Gummi, Junge!
				}
			}
		);
		exitItem.addActionListener(
			new ActionListener(){
				public void actionPerformed(ActionEvent e)
				{
					System.exit(0);
				}
			}
		);
		
		////////////ZEICHNEN///////////////////////////////////
		JMenu zeichnen = new JMenu("Zeichnen");

		JMenuItem kreisItem = new JMenuItem("Kreis");
		kreisItem.setMnemonic('k');
		zeichnen.add(kreisItem);
		
		JMenuItem rechtEckItem = new JMenuItem("Rechteck");
		rechtEckItem.setMnemonic('r');
		zeichnen.add(rechtEckItem);
		
		JMenuItem polygonItem = new JMenuItem("Polygon");
		polygonItem.setMnemonic('p');
		zeichnen.add(polygonItem);
		
		//adding action listener to menu items
		kreisItem.addActionListener(
			new ActionListener(){
				public void actionPerformed(ActionEvent e)
				{
					//......
				}
			}
		);
		rechtEckItem.addActionListener(
			new ActionListener(){
				public void actionPerformed(ActionEvent e)
				{
					//......
				}
			}
		);
		polygonItem.addActionListener(
				new ActionListener(){
					public void actionPerformed(ActionEvent e)
					{
						//......
					}
				}
			);
		////////////Info///////////////////////////////////	
		JMenu info = new JMenu("Info");
		info.addActionListener(
				new ActionListener(){
					public void actionPerformed(ActionEvent e)
					{
						//......
					}
				}
			);
		////////////ENDE///////////////////////////////////
		
		
		
		JMenuBar bar = new JMenuBar();
		setJMenuBar(bar);
		bar.add(datei);
		bar.add(zeichnen);
		bar.add(info);
		
		getContentPane();
		setSize(600, 500);
		setLocation(600, 200);
		setVisible(true);
	}
}

Die Main-Klasse sieht dementsprechend wie folgt aus:

Java:
package gui;
import javax.swing.JFrame;
public class Main {
	public static void main(String[] args)
	{
		Layout app = new Layout();
		app.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		
		//ContentLayout g = new ContentLayout();
	}
}

Nun dacht ich mir, jetzt kommt der Hauptteil des Fensters in eine weitere Klasse ContentLayout, um das nicht auch noch in die Klasse zu stecken, wo ich bereits das Menu drin hab, damit ich noch ein wenig durchblicke. Aber ich weiß echt nicht, wie ich nun das LayoutModel (z.B. Borderlayout) in die neue Klasse stecke und das dann in der Main-Klasse mit aufrufe.

Alle bisherigen Versuche sind fehlgeschlagen und ich hab maximal neben dem Menu noch ein zweites Fenster geöffnet mit dem BorderLayout ;)
 

jgh

Top Contributor
wenn du bspw deine Klasse ContentLayout von JPanel erben lässt, kannst du das z.B so zusammen frickeln:

Java:
ContentLayout contentLayout = new ContentLayout();
app.getContentPane().add(contentLayout);

und in deiner Klasse ContentLayout nutzt du dann das Layout, welches deine Anforderungen am besten genügt.
 

matcho

Mitglied
Also wenn ich das nun richtig verstanden habe, sieht die Main nun so aus:

Java:
package gui;
import javax.swing.JFrame;
public class Main {
	public static void main(String[] args)
	{
		Layout app = new Layout();
		app.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		ContentLayout contentLayout = new ContentLayout();
		app.getContentPane().add(contentLayout);
	}
}

Und in meiner ContentLayout.java gehts so los:

Java:
package gui;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;


public class ContentLayout extends JPanel{
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	private JButton button1;
    private JButton button2;
    private JButton button3;
    private JPanel panelButton;
    private JLabel oben;
    private JLabel anzeige;

    public ContentLayout()
    {
        //Buttons erzeugen
        button1 = new JButton("Button 1");
        button2 = new JButton("Button 2");
        button3 = new JButton("Button 3");

        //Panels erzeugen
        panelButton = new JPanel(new GridLayout(3,1));
        ...........
   }
}


??
Computer sagt bisher nämlich NEIN :)
 

jgh

Top Contributor
wie...dein Computer sagt "Nein" ???

du musst natürlich noch in deiner Klasse ContentLayout , die Componenten den Panels adden...

[JAVA=26]panelButton = new JPanel(new GridLayout(3, 1));
panelButton.add(button1);
this.add(panelButton);[/code]

so mal grob angedacht....
 

jgh

Top Contributor
das
Code:
this
kannst du auch weglassen.
Deine Klasse ContentLayout ist ein JPanel...also kannst du auch einfach [c]add.(wasAucImmerEinJComponentIst)[/c] ist aufrufen.
 

matcho

Mitglied
puuuh nun häng ich an dem LayoutModel. So soll es später mal aussehen:

layout.png




Java:
public class ContentLayout extends JPanel{
	private static final long serialVersionUID = 1L;
	private TextArea code;
	private JTextField title, url, alt;
	private JPanel bild;

    public ContentLayout()
    {
       setLayout(new BorderLayout(5,5));
       
       bild = new JPanel();
       add(BorderLayout.CENTER, bild);
       
       title = new JTextField(12);
       add(BorderLayout.EAST, title);
       url = new JTextField(12);
       add(BorderLayout.EAST, url);
       
       code = new TextArea("Hier kommt der spätere Quellcode von der ImageMap rein", 5, 3);		
//Muss ne Variable rein mit dem Quellcode und den Usereingaben
       add(BorderLayout.SOUTH, code);

    }
    
}

Würd gern wissen, ob ich auf dem richtigen Weg bin, oder ob bspw. EAST die Textfelder (title, url, alt) nochmal extra in einem Model gesteckt werden müssen??
 

jgh

Top Contributor
quick and dirty...evtl kannst du daraus ja etwas basteln:

Java:
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.awt.TextArea;

import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;

public class ContentLayout extends JPanel {
	private static final long serialVersionUID = 1L;
	private TextArea code;
	private JTextField title, url, alt;
	private JPanel bild, westPanel;
	private JLabel labelTitel, labelURL, labelAlt;

	public ContentLayout() {
		setLayout(new BorderLayout(5, 5));

		bild = new JPanel();
		// hier muss natürlich das Bild geladen werden
		bild.setBackground(Color.red);
		add(bild, BorderLayout.CENTER);

		westPanel = new JPanel(new GridBagLayout());
		title = new JTextField(12);
		labelTitel = new JLabel("Titel");
		GridBagConstraints gbc = new GridBagConstraints();
		gbc.insets = new Insets(10, 5, 10, 5);
		gbc.gridy = 0;
		westPanel.add(labelTitel, gbc);
		gbc.gridx = 1;
		westPanel.add(title, gbc);
		url = new JTextField(12);
		gbc.gridx = 0;
		gbc.gridy = 1;
		labelURL = new JLabel("URL");
		westPanel.add(labelURL, gbc);
		gbc.gridx = 1;
		westPanel.add(url, gbc);
		alt = new JTextField(12);
		gbc.gridx = 1;
		gbc.gridy = 2;
		westPanel.add(alt, gbc);
		add(westPanel, BorderLayout.EAST);

		code = new TextArea(
				"Hier kommt der spätere Quellcode von der ImageMap rein", 5, 3);
		// Muss ne Variable rein mit dem Quellcode und den Usereingaben
		add(BorderLayout.SOUTH, code);

	}
}
 

matcho

Mitglied
Wow...
damit lässt sich arbeiten

Danke nochmal :toll:


/edit:

achja, noch eine kleine Frage für heute
dort wo später das Bild über "Öffnen" eingebunden wird, muss ich ein OverlayLayout drüber legen, um darauf zu zeichnen, oder?

also etwa so

Java:
       bild = new JPanel();
       bild.setBackground(Color.darkGray);	// Hier muss das Bild rein und ein Overlay drüber ?
       add(BorderLayout.CENTER, bild);
       bild.setLayout(new OverlayLayout(bild));
 
Zuletzt bearbeitet:

matcho

Mitglied
nun häng ich beim laden eines bildes.
hab mich an ein Tutorial von Galileo Computing gehalten, aber habe meine Probleme, den Code über meine Klassen zu verteilen :(
hab in der Menu-Klasse den ActionListener hinzugefügt. Nun muss doch aber das eigentliche Zeichnen/Laden des Bildes in der COntentLayout erfolgen??!

Menu.java

Java:
package gui;

import javax.swing.*;
import javax.swing.filechooser.FileFilter;
import java.io.File;
import java.awt.event.*;

public class Menu extends JFrame{
	private static final long serialVersionUID = 1L;
	private ViewComponent viewComponent = new ViewComponent();
	public Menu()
	{
		super("Computergrafik - ImageMap");
		
		////////////DATEI///////////////////////////////////
		JMenu datei = new JMenu("Datei");

		JMenuItem openItem = new JMenuItem("Öffnen");
		openItem.setMnemonic('o');	//Hotkey o = oeffnen
		datei.add(openItem);
		
		JMenuItem exitItem = new JMenuItem("Beenden");
		exitItem.setMnemonic('x');
		datei.add(exitItem);	//Hotkey x = beenden
		
		//action listener für Menu
		openItem.addActionListener(
			new ActionListener(){
				public void actionPerformed(ActionEvent e)
				{
					/////////////BILD LADEN////////////////////
					JFileChooser d = new JFileChooser();
				    d.setFileFilter( new FileFilter()
				    {
				      @Override
				      public boolean accept( File f )
				      {
				        return f.isDirectory() || f.getName().toLowerCase().endsWith( ".jpg" )
				            || f.getName().toLowerCase().endsWith( ".gif" );
				      }
				      @Override
				      public String getDescription()
				      {
				        return "*.jpg;*.gif";
				      }
				    } );
				    d.showOpenDialog( null );
				    //File file = d.getSelectedFile();   ?????????
                                    //viewComponent.setImage( file ); ?????????
					
				}
			}
		);
		exitItem.addActionListener(
			new ActionListener(){
				public void actionPerformed(ActionEvent e)
				{
					System.exit(0);
				}
			}
		);
		
		////////////ZEICHNEN///////////////////////////////////
		JMenu zeichnen = new JMenu("Zeichnen");

		JMenuItem kreisItem = new JMenuItem("Kreis");
		kreisItem.setMnemonic('k');
		zeichnen.add(kreisItem);
		
		JMenuItem rechtEckItem = new JMenuItem("Rechteck");
		rechtEckItem.setMnemonic('r');
		zeichnen.add(rechtEckItem);
		
		JMenuItem polygonItem = new JMenuItem("Polygon");
		polygonItem.setMnemonic('p');
		zeichnen.add(polygonItem);
		
		//action listener für Menu
		kreisItem.addActionListener(
			new ActionListener(){
				public void actionPerformed(ActionEvent e)
				{
					//......
				}
			}
		);
		rechtEckItem.addActionListener(
			new ActionListener(){
				public void actionPerformed(ActionEvent e)
				{
					//......
				}
			}
		);
		polygonItem.addActionListener(
				new ActionListener(){
					public void actionPerformed(ActionEvent e)
					{
						//......
					}
				}
			);
		////////////Info///////////////////////////////////	
		JMenu info = new JMenu("Info");
		info.addActionListener(
				new ActionListener(){
					public void actionPerformed(ActionEvent e)
					{
						//....
					       
					}
				}
			);
		////////////ENDE///////////////////////////////////
		
		
		
		JMenuBar bar = new JMenuBar();
		setJMenuBar(bar);
		bar.add(datei);
		bar.add(zeichnen);
		bar.add(info);
		
		//ContentLayout
		
		getContentPane();
		setSize(700, 600);
		setLocation(600, 200);
		setVisible(true);
	}
}

JEtzt weiß ich leider nicht, wie ich den restlichen Quellcode unterbringe (in der ContentLayout?)
Java:
private Image image;
  public void setImage( File file )
  {
    image = Toolkit.getDefaultToolkit().getImage( file.getAbsolutePath() );
    if ( image != null )
      repaint();
  }
  @Override
  protected void paintComponent( Graphics g )
  {
    if ( image != null )
      g.drawImage( image, 0, 0, this );
  }

???:L
 
Zuletzt bearbeitet:

jgh

Top Contributor
du musst dir grundsätzlich vorher mal gedanken mache, wer auf welche Komponente wann und wie Zugriff haben soll.
Das ist hier eigentlich nur reines Gefrickel^^

Deine Mainmethode sollte nun folgendermaßen aussehen: Klasse Layout heißt ja wohl jetzt Menu, wobei das auch nicht gut ist...das ist dein JFrame, der beihaltet dein Menu.

Java:
	public static void main(String[] args) {
		ContentLayout contentLayout = new ContentLayout();
		Layout app = new Layout(contentLayout);
		app.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		app.getContentPane().add(contentLayout);

	}

Die Klasse Menu, oder vorher mal Layout braucht folgende Änderungen im Konstruktor und bei den Klassenvariablen:

Java:
private ContentLayout cl;
	private Image image;

	public Layout(ContentLayout contentLayout) {
		super("Computergrafik - ImageMap");
		cl = contentLayout;
		final Layout layout = this;
//...

zusätzlich folgende Methode:
Java:
	protected void loadBild(File file) {
		ImageIcon imageIcon = null;
		imageIcon = new ImageIcon(file.getAbsolutePath());
		JLabel label = new JLabel(imageIcon);
		cl.getBildPanel().removeAll();
		cl.getBildPanel().add(label);
		cl.validate();
		cl.repaint();
	}



und dein ActionListener:
Java:
openItem.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				JFileChooser jfc = new JFileChooser();
				jfc.setFileFilter(new FileFilter() {

					@Override
					public String getDescription() {
						return "*.jpg;*.gif";

					}

					@Override
					public boolean accept(File f) {
						return f.isDirectory()
								|| f.getName().toLowerCase().endsWith(".jpg")
								|| f.getName().toLowerCase().endsWith(".gif");

					}
				});
				int auswahl = jfc.showDialog(layout, "Bild auswählen");
				if (auswahl == JFileChooser.APPROVE_OPTION) {
					layout.loadBild(jfc.getSelectedFile());
				}

			}
		});

Du wirst aber spätestens beim Malen auf dem Bild feststellen...dass es wirklich nur gefrickel ist und keine saubere Trennung.
 

matcho

Mitglied
so lang es irgendwie zum Ziel führt und die weiteren sachen sich dennoch problemlos ins gefrickel einarbeiten lassen :oops:

jetzt weiß ich aber immer noch nicht genau, wie ich im ContentLayout das getBildPanel mit einbringe?

Java:
public ContentLayout() {
        setLayout(new BorderLayout(5, 5));
 
        bild = new JPanel();
        // hier muss natürlich das Bild geladen werden
        
        //bild.setBackground(Color.GRAY);
        add(bild, BorderLayout.CENTER);
 

jgh

Top Contributor
ok, und welches Bild willst du denn laden?
in der Klasse ContentLayout hat der User ja noch keines ausgewählt...wenn du ein "Default-Bild" laden willst, dann bspw so:

Java:
bild = new JPanel();
		bild.add(new JLabel(new ImageIcon("./img/wasAuchImmer.jpg")));
		add(bild, BorderLayout.CENTER);

ansonsten wartet dein Programm darauf, dass der User ein Bild auswählt...oder verstehe ich dich gerade falsch?
 

matcho

Mitglied
na der User soll das Bild über das Menu Datei>Öffnen (also in der nun wieder Layout.java) auswählen und eben dieses soll im ContentLayout angezeigt werden
also kein fest vorgeschriebenes Bild

/edit: kompliziert wird sicherlich auch, dass das BorderLayout.CENTER (wo das bild hin soll) im ContentLayout sich an die Größe des Bildes anpasst...da wären wir beim gefrickel ;)
 

jgh

Top Contributor
das habe ich dir oben geschrieben, wie das geht?
hier mal die beiden Klassen von dir :D , funktioniert einwandfrei...

Java:
import java.awt.BorderLayout;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.awt.TextArea;

import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;

public class ContentLayout extends JPanel {
	private static final long serialVersionUID = 1L;
	private TextArea code;
	private JTextField title, url, alt;
	private JPanel bild, westPanel;
	private JLabel labelTitel, labelURL, labelAlt;

	public ContentLayout() {
		setLayout(new BorderLayout(5, 5));

		bild = new JPanel();
		add(bild, BorderLayout.CENTER);

		westPanel = new JPanel(new GridBagLayout());
		title = new JTextField(12);
		labelTitel = new JLabel("Titel");
		GridBagConstraints gbc = new GridBagConstraints();
		gbc.insets = new Insets(10, 5, 10, 5);
		gbc.gridy = 0;
		westPanel.add(labelTitel, gbc);
		gbc.gridx = 1;
		westPanel.add(title, gbc);
		url = new JTextField(12);
		gbc.gridx = 0;
		gbc.gridy = 1;
		labelURL = new JLabel("URL");
		westPanel.add(labelURL, gbc);
		gbc.gridx = 1;
		westPanel.add(url, gbc);
		alt = new JTextField(12);
		gbc.gridx = 1;
		gbc.gridy = 2;
		westPanel.add(alt, gbc);
		add(westPanel, BorderLayout.EAST);

		code = new TextArea(
				"Hier kommt der spätere Quellcode von der ImageMap rein", 5, 3);
		// Muss ne Variable rein mit dem Quellcode und den Usereingaben
		add(BorderLayout.SOUTH, code);

	}

	public JPanel getBildPanel() {
		return bild;
	}

}
Java:
import java.awt.Color;
import java.awt.Image;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;

import javax.swing.ImageIcon;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.filechooser.FileFilter;

public class Layout extends JFrame {
	/**
     * 
     */
	private static final long serialVersionUID = 1L;
	private ContentLayout cl;
	private Image image;

	public Layout(ContentLayout contentLayout) {
		super("Computergrafik - ImageMap");
		cl = contentLayout;
		final Layout layout = this;
		// //////////DATEI///////////////////////////////////
		JMenu datei = new JMenu("Datei");

		JMenuItem openItem = new JMenuItem("Öffnen");
		openItem.setMnemonic('o'); // Hotkey o = oeffnen
		datei.add(openItem);

		JMenuItem exitItem = new JMenuItem("Beenden");
		exitItem.setMnemonic('x');
		datei.add(exitItem); // Hotkey x = beenden

		// adding action listener to menu items
		openItem.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				JFileChooser jfc = new JFileChooser();
				jfc.setFileFilter(new FileFilter() {

					@Override
					public String getDescription() {
						return "*.jpg;*.gif";

					}

					@Override
					public boolean accept(File f) {
						return f.isDirectory()
								|| f.getName().toLowerCase().endsWith(".jpg")
								|| f.getName().toLowerCase().endsWith(".gif");

					}
				});
				int auswahl = jfc.showDialog(layout, "Bild auswählen");
				if (auswahl == JFileChooser.APPROVE_OPTION) {
					layout.loadBild(jfc.getSelectedFile());
				}

			}
		});
		exitItem.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				System.exit(0);
			}
		});

		// //////////ZEICHNEN///////////////////////////////////
		JMenu zeichnen = new JMenu("Zeichnen");

		JMenuItem kreisItem = new JMenuItem("Kreis");
		kreisItem.setMnemonic('k');
		zeichnen.add(kreisItem);

		JMenuItem rechtEckItem = new JMenuItem("Rechteck");
		rechtEckItem.setMnemonic('r');
		zeichnen.add(rechtEckItem);

		JMenuItem polygonItem = new JMenuItem("Polygon");
		polygonItem.setMnemonic('p');
		zeichnen.add(polygonItem);

		// adding action listener to menu items
		kreisItem.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				// ......
			}
		});
		rechtEckItem.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				// ......
			}
		});
		polygonItem.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				// ......
			}
		});
		// //////////Info///////////////////////////////////
		JMenu info = new JMenu("Info");
		info.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				// ......
			}
		});
		// //////////ENDE///////////////////////////////////

		JMenuBar bar = new JMenuBar();
		setJMenuBar(bar);
		bar.add(datei);
		bar.add(zeichnen);
		bar.add(info);

		getContentPane();
		setSize(600, 500);
		setLocation(600, 200);
		setVisible(true);
	}

	protected void loadBild(File file) {
		ImageIcon imageIcon = null;
		imageIcon = new ImageIcon(file.getAbsolutePath());
		JLabel label = new JLabel(imageIcon);
		cl.getBildPanel().removeAll();
		cl.getBildPanel().add(label);
		cl.validate();
		cl.repaint();
	}

	public static void main(String[] args) {
		ContentLayout contentLayout = new ContentLayout();
		Layout app = new Layout(contentLayout);
		app.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		app.getContentPane().add(contentLayout);

	}

}
 

matcho

Mitglied
also bei mir will es nicht so richtig funktionieren

öffne nen bild, wird aber nicht angezeigt??

Layout.java

Java:
package gui;

import java.awt.Image;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
 
import javax.swing.ImageIcon;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.filechooser.FileFilter;
 
public class Layout extends JFrame {
    /**
     * 
     */
    private static final long serialVersionUID = 1L;
    private ContentLayout cl;
    private Image image;
 
    public Layout(ContentLayout contentLayout) {
        super("Computergrafik - ImageMap");
        cl = contentLayout;
        final Layout layout = this;
        // //////////DATEI///////////////////////////////////
        JMenu datei = new JMenu("Datei");
 
        JMenuItem openItem = new JMenuItem("Öffnen");
        openItem.setMnemonic('o'); // Hotkey o = oeffnen
        datei.add(openItem);
 
        JMenuItem exitItem = new JMenuItem("Beenden");
        exitItem.setMnemonic('x');
        datei.add(exitItem); // Hotkey x = beenden
 
        // adding action listener to menu items
        openItem.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                JFileChooser jfc = new JFileChooser();
                jfc.setFileFilter(new FileFilter() {
 
                    @Override
                    public String getDescription() {
                        return "*.jpg;*.gif";
                    } 
                    @Override
                    public boolean accept(File f) {
                        return f.isDirectory()
                                || f.getName().toLowerCase().endsWith(".jpg")
                                || f.getName().toLowerCase().endsWith(".gif");
 
                    }
                });
                int auswahl = jfc.showDialog(layout, "Bild auswählen");
                if (auswahl == JFileChooser.APPROVE_OPTION) {
                    layout.loadBild(jfc.getSelectedFile());
                }
 
            }
        });
        exitItem.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                System.exit(0);
            }
        });
 
        // //////////ZEICHNEN///////////////////////////////////
        JMenu zeichnen = new JMenu("Zeichnen");
 
        JMenuItem kreisItem = new JMenuItem("Kreis");
        kreisItem.setMnemonic('k');
        zeichnen.add(kreisItem);
 
        JMenuItem rechtEckItem = new JMenuItem("Rechteck");
        rechtEckItem.setMnemonic('r');
        zeichnen.add(rechtEckItem);
 
        JMenuItem polygonItem = new JMenuItem("Polygon");
        polygonItem.setMnemonic('p');
        zeichnen.add(polygonItem);
 
        // adding action listener to menu items
        kreisItem.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                // ......
            }
        });
        rechtEckItem.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                // ......
            }
        });
        polygonItem.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                // ......
            }
        });
        // //////////Info///////////////////////////////////
        JMenu info = new JMenu("Info");
        info.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                // ......
            }
        });
        // //////////ENDE///////////////////////////////////
 
        JMenuBar bar = new JMenuBar();
        setJMenuBar(bar);
        bar.add(datei);
        bar.add(zeichnen);
        bar.add(info);
 
        getContentPane();
        setSize(600, 500);
        setLocation(600, 200);
        setVisible(true);
    }
 
    protected void loadBild(File file) {
        ImageIcon imageIcon = null;
        imageIcon = new ImageIcon(file.getAbsolutePath());
        JLabel label = new JLabel(imageIcon);
        cl.getBildPanel().removeAll();
        cl.getBildPanel().add(label);
        cl.validate();
        cl.repaint();
    }
 
    public static void main(String[] args) {
        ContentLayout contentLayout = new ContentLayout();
        Layout app = new Layout(contentLayout);
        app.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        app.getContentPane().add(contentLayout);
 
    }
 
}

ContentLayout.java

Java:
package gui;
import java.awt.*; 
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;
 
public class ContentLayout extends JPanel {
    private static final long serialVersionUID = 1L;
    private JTextArea code;
    private JTextField title, url, alt;
    private JPanel bild, westPanel;
    private JLabel labelTitel, labelURL, labelAlt;
    private JButton add;
 
    public ContentLayout() {
        setLayout(new BorderLayout(5, 5));
 
        bild = new JPanel();
        // hier muss natürlich das Bild geladen werden
        
        //bild.setBackground(Color.GRAY);
        add(bild, BorderLayout.CENTER);
 
        westPanel = new JPanel(new GridBagLayout());
        
        title = new JTextField(15);
        labelTitel = new JLabel("Titel");
        GridBagConstraints gbc = new GridBagConstraints();
        gbc.insets = new Insets(5, 5, 5, 5);
        gbc.gridy = 0;
        westPanel.add(labelTitel, gbc);
        gbc.gridx = 1;
        westPanel.add(title, gbc);
        
        url = new JTextField(15);
        gbc.gridx = 0;
        gbc.gridy = 1;
        labelURL = new JLabel("URL");
        westPanel.add(labelURL, gbc);
        gbc.gridx = 1;
        westPanel.add(url, gbc);
        
        alt = new JTextField(15);
        gbc.gridx = 0;
        gbc.gridy = 2;
        labelAlt = new JLabel("alt");
        westPanel.add(labelAlt, gbc);
        gbc.gridx = 1;
        westPanel.add(alt, gbc);
        
        add = new JButton("Add");
        gbc.gridx = 1;
        gbc.gridy = 3;
        westPanel.add(add, gbc);
       
        add.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
            	
              // hinzufügen der Usereingaben in Quellcode
              JOptionPane.showMessageDialog (
                   (JButton) e.getSource(), "Hinzugefügt");
            }
          });

        add(westPanel, BorderLayout.EAST);
        
        
        String quellcode =  "<img src='xxxxxxxxxxx' border='0' alt='xxxxxxxxxxx' usemap='xxxxxxxxxxx'/>\n" +
        					"<map name='xxxxxxxxxxx'>\n" +
		        			"<area shape='rect' coords='22,33,44,55' href='xxxxxxxxxx' alt='xxxxxxxxxxx' title='xxxxxxxxxxx' />\n" +
		        			"<area shape='rect' coords='99,564,234,123' href='xxxxxxxxxx' alt='xxxxxxxxxxx' title='xxxxxxxxxxx' />\n" +
		        			"</map>";
        
        code = new JTextArea(quellcode, 5, 3);	// Quellcode
        code.setForeground(Color.MAGENTA);
        //code.SCROLLBARS_VERTICAL_ONLY;
        add(BorderLayout.SOUTH, code);
 
    }
    public JPanel getBildPanel() {
        return bild;
    }

}

Main.java

Java:
package gui;
import javax.swing.JFrame;
public class Main {
	public static void main(String[] args)
	{
		ContentLayout contentLayout = new ContentLayout();
        Layout app = new Layout(contentLayout);
        app.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        app.getContentPane().add(contentLayout);

	}
}

Fehlt mir noch was??? :rtfm:
 

jgh

Top Contributor
keine Ahnung^^

probiere mal das aus, ob das bei dir funktioniert, oder nicht.
 

Anhänge

  • Computergrafik.jar
    49,6 KB · Aufrufe: 4

matcho

Mitglied
irgendwie schon ;)
ist der gleiche quellcode, lag an dem bild, welches ich ausgewählt hab (aber keine ahnung warum, war nämlich nen normales jpg)

so nun schau ich mir mal dieses glas-panel an
bis hier hin ein dickes danke!
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
OnDemand PDF Erstellung / Reports Framework Allgemeine Java-Themen 3
Muatasem Hammud Erstellung von Testdaten für Arrays Allgemeine Java-Themen 6
D UML Erstellung Allgemeine Java-Themen 6
H Hilfe bei Erstellung eines Hilfe Fenster bei Tastendruck (F1 bei Win98) Allgemeine Java-Themen 5
O Datentypen Erstellung eines Containers, der verschachtelte Map-Strukturen beherbergen kann Allgemeine Java-Themen 0
A Vererbung Übungsaufgabe Vererbung - Erstellung Klassenhierarchie Allgemeine Java-Themen 1
maestr0 Programmatische Java Projekt Erstellung Allgemeine Java-Themen 2
C Umlautdarstellung nach Jar-Erstellung Allgemeine Java-Themen 4
D Frage bzgl. Erstellung eines Datenmodells Allgemeine Java-Themen 5
A Salt Erstellung verbessern Allgemeine Java-Themen 7
S Erstellung einer verschlüsselten Passwort Datei Allgemeine Java-Themen 11
Semox Unterschied bei Thread Erstellung Allgemeine Java-Themen 11
J Progress Bar während Datenbank Erstellung Allgemeine Java-Themen 2
A Dynamische PDF Erstellung mit iText Allgemeine Java-Themen 4
G Problem bei jar erstellung Allgemeine Java-Themen 4
D erstellung einer seitenlangen xml durch ireport Allgemeine Java-Themen 3
A Problem mit der jar-Erstellung Allgemeine Java-Themen 5
@ [RegExp] Probleme bei Erstellung des Ausdrucks Allgemeine Java-Themen 3
C ApplicationContext blockiert bei der Erstellung Allgemeine Java-Themen 2
A Thema JAR-Erstellung (mal wieder) => etwas komplizierter Allgemeine Java-Themen 8
S PDF Erstellung mit zusätzlichen Headerinformationen Allgemeine Java-Themen 2
G Object erstellung und initialisierung. Allgemeine Java-Themen 4
G Objekt Erstellung in run() von Threads/Runnables Allgemeine Java-Themen 3
G Brauche Hilfe bei Erstellung eines Musters! Allgemeine Java-Themen 3

Ähnliche Java Themen

Neue Themen


Oben