Java JPanel - Bild einfügen und JTabbedPain sperren

CPU

Lieutenant
Registriert
Jan. 2006
Beiträge
704
JPanel - Bild einfügen

Hallo,

langsam verzweifele ich ... Seit einigen Stunden beschäftige ich mich mit dem Problem eine einfache Grafik in einen JFrame einzufügen!

Ich habe natürlich ersteinmal gegoogelt, wo auch viele Ergebnisse kamen, doch keines der Lösungen, die ich gefunden habe hat funktioniert! Im Anhang findet Ihr ein Bild, wo ich in Jigloo versucht habe ein Bild einzufügen, doch da hat sich nichts im Quellcode getan (linke Seite)! :(:(

Vielen Dank vorab für Eure Hilfe, :]
CPU

----------------------------------------------------------------
Falls es Euch weiter hilft, hier der Quelltext der Hauptdatei, wo ich ein Bild einfügen wollte:
Code:
package src;
import java.awt.BorderLayout;
import javax.swing.JLabel;

import javax.swing.WindowConstants;
import javax.swing.SwingUtilities;


/**
* This code was edited or generated using CloudGarden's Jigloo
* SWT/Swing GUI Builder, which is free for non-commercial
* use. If Jigloo is being used commercially (ie, by a corporation,
* company or business for any purpose whatever) then you
* should purchase a license for each developer using Jigloo.
* Please visit www.cloudgarden.com for details.
* Use of Jigloo implies acceptance of these licensing terms.
* A COMMERCIAL LICENSE HAS NOT BEEN PURCHASED FOR
* THIS MACHINE, SO JIGLOO OR THIS CODE CANNOT BE USED
* LEGALLY FOR ANY CORPORATE OR COMMERCIAL PURPOSE.
*/
public class NewJFrame extends javax.swing.JFrame {
	private JLabel jLabel1;

	/**
	* Auto-generated main method to display this JFrame
	*/
	public static void main(String[] args) {
		SwingUtilities.invokeLater(new Runnable() {
			public void run() {
				NewJFrame inst = new NewJFrame();
				inst.setLocationRelativeTo(null);
				inst.setVisible(true);
			}
		});
	}
	
	public NewJFrame() {
		super();
		initGUI();
	}
	
	private void initGUI() {
		try {
			setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
			{
				jLabel1 = new JLabel(new ImageIcon("bild.jpg"));
				getContentPane().add(jLabel1, BorderLayout.CENTER);
				jLabel1.setText("jLabel1");
			}
			pack();
			setSize(400, 300);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

}
 

Anhänge

  • uebersicht.jpg
    uebersicht.jpg
    74 KB · Aufrufe: 1.100
Zuletzt bearbeitet:
JTable - wie füge ich eine Zeile an?

Vielen Dank für den hilfreichen Link! Es hat super funktioniert! :):)

Kennt sich jemand von Euch mit JTable aus? Ich bin auf der Suche nach einem einfachen Skript, dass einer bestehenden JTable einfach nur eine Zeile anfügt! Auch hierzu gibt es eine Menge Links unter Google, doch keiner ist mir hilfreich! :(

CPU
 
Auf dieser Seite war ich auch schon bei meiner Internetrecherche, eigentlich ganz gut ... hat mir leider nicht weitergeholfen, da ich da nicht wirklich eine Beschreibung (oder einen Codefetzen) finde, wie man am Ende einer Tabelle einfach eine leere Zeile einfügt!!!

CPU *verzweifel*
 
Code:
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.GroupLayout;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JComponent;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextPane;
import javax.swing.LayoutStyle;

import javax.swing.WindowConstants;
import javax.swing.event.HyperlinkEvent;
import javax.swing.event.HyperlinkListener;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableModel;
import javax.swing.SwingUtilities;


/**
* This code was edited or generated using CloudGarden's Jigloo
* SWT/Swing GUI Builder, which is free for non-commercial
* use. If Jigloo is being used commercially (ie, by a corporation,
* company or business for any purpose whatever) then you
* should purchase a license for each developer using Jigloo.
* Please visit www.cloudgarden.com for details.
* Use of Jigloo implies acceptance of these licensing terms.
* A COMMERCIAL LICENSE HAS NOT BEEN PURCHASED FOR
* THIS MACHINE, SO JIGLOO OR THIS CODE CANNOT BE USED
* LEGALLY FOR ANY CORPORATE OR COMMERCIAL PURPOSE.
*/
public class html extends javax.swing.JFrame {
	private JScrollPane jScrollPane1;
	private JButton jButton1;
	private JTable jTable1;

	/**
	* Auto-generated main method to display this JFrame
	*/
	public static void main(String[] args) {
		SwingUtilities.invokeLater(new Runnable() {
			public void run() {
				html inst = new html();
				inst.setLocationRelativeTo(null);
				inst.setVisible(true);
			}
		});
	}
	
	public html() {
		super();
		initGUI();
	}
	
	private void initGUI() {
		try {
			GroupLayout thisLayout = new GroupLayout((JComponent)getContentPane());
			getContentPane().setLayout(thisLayout);
			setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
			{
				jScrollPane1 = new JScrollPane();
				{
					TableModel jTable1Model = 
						new DefaultTableModel(
								new String[][] { { "One", "Two" }, { "Three", "Four" } },
								new String[] { "Column 1", "Column 2" });
					jTable1 = new JTable();
					jScrollPane1.setViewportView(jTable1);
					jTable1.setModel(jTable1Model);
				}
			}
			{
				jButton1 = new JButton();
				jButton1.setText("Add");
				jButton1.addActionListener(new ActionListener() {
					public void actionPerformed(ActionEvent evt) {
						jButton1ActionPerformed(evt);
					}
				});
			}
			thisLayout.setVerticalGroup(thisLayout.createSequentialGroup()
				.addContainerGap()
				.addComponent(jScrollPane1, 0, 210, Short.MAX_VALUE)
				.addPreferredGap(LayoutStyle.ComponentPlacement.UNRELATED, 1, GroupLayout.PREFERRED_SIZE)
				.addComponent(jButton1, GroupLayout.PREFERRED_SIZE, GroupLayout.PREFERRED_SIZE, GroupLayout.PREFERRED_SIZE)
				.addContainerGap());
			thisLayout.setHorizontalGroup(thisLayout.createSequentialGroup()
				.addContainerGap()
				.addGroup(thisLayout.createParallelGroup()
				    .addComponent(jScrollPane1, GroupLayout.Alignment.LEADING, 0, 368, Short.MAX_VALUE)
				    .addComponent(jButton1, GroupLayout.Alignment.LEADING, 0, 368, Short.MAX_VALUE))
				.addContainerGap());
			pack();
			setSize(400, 300);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	private void jButton1ActionPerformed(ActionEvent evt) {
		// TODO: Programmcode einfügen, der eine leere Zeile einfügt
	}

}

Um es ein bisschen plastischer zu machen: Oben seht Ihr den Beispielcode. Wenn nun auf den Button "jButton1" geklickt wird, wird der ActionHandler aufgerufen, der einfach eine neue Zeile in die Tabelle einfügt!

Bitte helft mir! Ich habe bereits sämtliche Internetseiten durchsucht und den Code ausprobiert!

CPU :(
 
naja, man wird wahrscheinlich niemals das gesamte Internet abgesucht haben ;)


Eigentlich ist es ganz einfach: du musst allerdings selbst für eine hinreichend brauchbare Datenstruktur sorgen und dies geschieht am besten innerhalb eines TableModels.

Dazu erweitert man beispielswiese die Klasse "DefaultTableModel":

kann man hier auch Code einfügen?



hier das Tabellenmodell:
Code:
public class MeinTableModel extends DefaultTableModel{
	
	ArrayList<MeinDatentyp> daten;
	
	public MeinTableModel(ArrayList<MeinDatentyp> d){
		this.daten = d;
	}
	public int getColumnCount(){
		if(daten != null) return 5; // einfach mal fuenf Spalten
		else return 5;
	}
	
	public int getRowCount(){
		if(daten != null) return daten.size();
		else return 0;
 	}
	
	public Object getValueAt(int row, int col){
		switch (col){
		case 0: return daten.get(row).getName();
		case 1: return daten.get(row).getAdresse();
		case 2: return daten.get(row).getEmail();
		case 3: return daten.get(row).getTelefonnummer();
		case 4: return "ID:"+row;
		}
		return "leer";
	}
}


hier MeinDatentyp:
Code:
public class MeinDatentyp {

	private String name;
	private String adresse;
	private String telefonnummer;
	private String email;
	
	
	
	public MeinDatentyp(String name, String adresse, String telefonnummer, String email) {
		super();
		this.name = name;
		this.adresse = adresse;
		this.telefonnummer = telefonnummer;
		this.email = email;
	}
	
	public String getAdresse() {
		return adresse;
	}
	public void setAdresse(String adresse) {
		this.adresse = adresse;
	}
	public String getEmail() {
		return email;
	}
	public void setEmail(String email) {
		this.email = email;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getTelefonnummer() {
		return telefonnummer;
	}
	public void setTelefonnummer(String telefonnummer) {
		this.telefonnummer = telefonnummer;
	}
	
}


und schließlich noch der Aufruf innerhalb des Programms:
Code:
table = new JTable();
			ArrayList<MeinDatentyp> meinedaten = new ArrayList<MeinDatentyp>();	 
			meinedaten.add(new MeinDatentyp("Hans", "herestreet 44","0345 23452","joe@gforce.de"));
			MeinTableModel model = new MeinTableModel(meinedaten);
			table.setModel(model);



später kann man einfach mit meinedaten.add(...) eine neue Zeile zur Tabelle hinzufügen. Im Grunde fügt man nur zur Datenstruktur einen neuen Eintrag hinzu, der dann automatisch angezeigt wird - in Form einer neuen Tabellenzeile.




ps. bei den Codes fehlen die Importanweisungen ;)
 
Danke, doch irgendwie verstehe ich das nicht! Ich hab mir große Mühe gegeben ... aber was nicht ist, ist nicht!

Gibt es nicht ein ganz einfaches Beispiel? Ich lerne die Dinge am Besten, wenn ich zu Anfang erstmal ein Beispiel anschaue und nachbaue?

Wäre es vielleicht möglich, CoolHandLuke (oder jemand anderes), dass du deinen Vorschlag direkt auf meinen Quellcode (darüber) anwendest? Das wäre super !!:(

CPU
 
Hmmm.... reicht es denn nicht, wenn du einfach nur den ein:
Code:
TableModel jTable1Model = new DefaultTableModel(new String[][] { { "One", "Two" }, { "Three", "Four" }},new String[] { "Column 1", "Column 2" });
jTable1 = new JTable();
jScrollPane1.setViewportView(jTable1);
jTable1.setModel(jTable1Model);

durch:
Code:
ArrayList<MeinDatentyp> meinedaten = new ArrayList<MeinDatentyp>();	 
meinedaten.add(new MeinDatentyp("Hans", "herestreet 44","0345 23452","joe@gforce.de"));
MeinTableModel jTable1Model = new MeinTableModel(meinedaten);
jTable1 = new JTable();
jScrollPane1.setViewportView(jTable1);
jTable1.setModel(jTable1Model);

ersetzt und die anderen beiden Klassen erreichbar - z.B. im gleichen Verzeichnis - liegen lässt?
 
Aber was bedeutet in der folgenden Zeile dieser Terminus <MeinDatentyp>?
Code:
ArrayList<MeinDatentyp> meinedaten = new ArrayList<MeinDatentyp>();

CPU
 
Also, wenn ich
Code:
ArrayList<MeinDatentyp> meinedaten = new ArrayList<MeinDatentyp>(); 

durch 

ArrayList<String> meinedaten = new ArrayList<String>();
ersetze, wird ArrayList immer unterschlängelt und die folgende Nachricht gezeigt:

Eclipse schrieb:
ArrayList cannot be resolved to a type

:(:(
CPU
 
ja, vielleicht hätte ich oben in den Codes die Import-Anweisungen doch drin lassen sollen:

wenn ich mich nicht irre (ich verlasse mich dabei eigentlich immer auf Eclipse und merke mir die Import gar nicht erst - wahhh diese digitale Demenz!)

Code:
import java.util.ArrayList;


wenn du eh Eclipse nutzt: einfach mal Strg+Shift+o drücken ("organize imports")


achso: außerdem solltest du auf Java 5 umstellen:

mit der rechten Maustaste auf der Projekt klicken (normale Ansicht, müsste daher die linke Spalte sein), dann auf "properties", "java compiler" und häkchen bei "enable project specific ..." anklicken. Nun "compiler compliance level" auf 5 stellen - denn sonst funktioniert das mit den generics nicht so richtig.
 
Zuletzt bearbeitet: (Nachtrag)
Danke! :):)

Aber wie kann ich bei jedem einfügen von Daten die Tabelle neu Aufbauen? Denn momentan werden die hinzugefügten Zeilen erst angezeigt, wenn man auf die alten klickt!

CPU
 
Zurück
Oben