Bild auf JPanel, aber wie?

Hey Leute,

hab mich jetzt schon tot-gesucht und verrückt-getestet. Ich möchte in einem JTable (bzw. dahinter) in meiner bestehenden GUI ein Hintergrundbild einfügen. Die GUI sieht folgendermaßen aus...

Java:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.table.*;
import javax.swing.event.*;
import java.sql.*;

public class GUI extends JPanel implements ActionListener, ListSelectionListener {
	private Personalverwaltung ap;
	private JTextField t1 = new JTextField(40);
	private JTextField t2 = new JTextField(40);
	private JTextField t3 = new JTextField(40);
	private JTextField t4 = new JTextField(40);
	private JLabel msg = new JLabel(" ");
	private JTable table = new JTable();
	private JTableHeader header;

	public GUI(Personalverwaltung ap) {
		this.ap = ap;
		setLayout(new BorderLayout(5, 5));

		JPanel p1 = new JPanel();
		p1.setLayout(new FlowLayout(FlowLayout.CENTER, 5, 5));
		JButton b1 = new JButton("Anzeigen");
		JButton b2 = new JButton("Einfügen");
		JButton b3 = new JButton("Ändern");
		JButton b4 = new JButton("Löschen");
		JButton b5 = new JButton("Alle Personen");
		JButton b6 = new JButton("Zurücksetzen");
		b1.addActionListener(this);
		...
		b6.addActionListener(this);
		p1.add(b1);
		...
		p1.add(b6);
		
		JPanel p2 = new JPanel();
		p2.setLayout(new GridLayout(4, 1, 5, 5));
		p2.add(new JLabel("Pers.-Nr.", JLabel.RIGHT));
		p2.setPreferredSize(new Dimension(150,20)); 
		p2.add(new JLabel("Vorname", JLabel.RIGHT));
		p2.add(new JLabel("Nachname", JLabel.RIGHT));
		p2.add(new JLabel("Gehalts-Kl.", JLabel.RIGHT));
		
		JPanel p3 = new JPanel();
		p3.setLayout(new GridLayout(4, 1, 5, 5));
		p3.add(t1);
		...
		p3.add(t4);

		JPanel p4 = new JPanel();
		p4.setLayout(new BorderLayout());
		p4.add(msg, BorderLayout.NORTH);
		p4.add(new JScrollPane(table), BorderLayout.CENTER);
		
		add(p1, BorderLayout.NORTH);
		add(p2, BorderLayout.WEST);
		add(p3, BorderLayout.EAST);
		add(p4, BorderLayout.SOUTH);

		msg.setForeground(Color.red);
		table.setModel(ap.getDatenmodell());
		table.setPreferredScrollableViewportSize(new Dimension(500, 300));
		table.getSelectionModel().addListSelectionListener(this);
		header = table.getTableHeader();
		header.addMouseListener(new MyMouseListener());
	}

	public void actionPerformed(ActionEvent e) {
		String cmd = e.getActionCommand();
		if (cmd.equals("Anzeigen"))
			doAnzeigen();
		else if (cmd.equals("Einfügen"))
			doEinfuegen();
		else if (cmd.equals("Ändern"))
			doAendern();
		else if (cmd.equals("Löschen"))
			doLoeschen();
		else if (cmd.equals("Alle Personen"))
			doListe(0);
		else if (cmd.equals("Zurücksetzen"))
			doZuruecksetzen();
	}

	public void valueChanged(ListSelectionEvent e) {
		int row = table.getSelectedRow();
		if (row < 0)
			return;
		t1.setText((String)table.getValueAt(row, 0));
		t2.setText((String)table.getValueAt(row, 1));
		t3.setText((String)table.getValueAt(row, 2));
		t4.setText(String.valueOf(table.getValueAt(row, 3)));
	}

	public void doAnzeigen() {
		t2.setText("");
		t3.setText("");
		msg.setText(" ");

		try {
			int nr = Integer.parseInt(t1.getText());
			Person a = ap.getPerson(nr);
			if (a == null)
				msg.setText("Personal-Nr. " + nr + " nicht vorhanden");
			else {
				t2.setText(a.getVorname());
				t3.setText(a.getNachname());
				t4.setText(String.valueOf(a.getGehalt()));
			}
		}
		catch (NumberFormatException e) {
			msg.setText("Personalnummer muss eine ganze Zahl sein");
		}
		catch (SQLException e) {
			System.err.println(e);
		}
	}

	public void doEinfuegen() {
		int nr; 
		String vorname; 
		String nachname; 
		double gehalt;

		msg.setText(" ");

		try {
			nr = Integer.parseInt(t1.getText());
		}
		catch (NumberFormatException e) {
			msg.setText("Personal-Nr. muss eine ganze Zahl sein");
			return;
		}

		vorname = t2.getText();
		if (vorname.length() == 0) {
			msg.setText("Vorname fehlt");
			return;
		}

		nachname = t3.getText();
		if (nachname.length() == 1) {
			msg.setText("Nachname fehlt");
			return;
		}

		try {
			gehalt = Double.parseDouble(t4.getText());
		}
		catch (NumberFormatException e) {
			msg.setText("Gehalts-Kl. muss eine Zahl (z.B. 12.5) sein");
			return;
		}
		
		Person a = new Person(nr, vorname, nachname, gehalt);

		try {
			if (ap.vorhanden(nr)) {
				msg.setText("Personal-Nr. " + nr + " ist bereits vorhanden");
				return;
			}
			ap.insertPerson(a);
			msg.setText("Person wurde eingefügt");
		}
		catch (SQLException e) {
			System.err.println(e);
		}
	}

	public void doAendern() {
		int nr; 
		String vorname; 
		String nachname; 
		double gehalt;
		
		msg.setText(" ");

		try {
			nr = Integer.parseInt(t1.getText());
		}
		catch (NumberFormatException e) {
			msg.setText("Personal-Nr. muss eine ganze Zahl sein");
			return;
		}

		vorname = t2.getText();
		if (vorname.length() == 0) {
			msg.setText("Vorname fehlt");
			return;
		}

		nachname = t3.getText();
		if (nachname.length() == 1) {
			msg.setText("Nachname fehlt");
			return;
		}

		try {
			gehalt = Double.parseDouble(t4.getText());
		}
		catch (NumberFormatException e) {
			msg.setText("Fehlermeldung NACHNAME");
			return;
		}
		
		Person a = new Person(nr, vorname, nachname, gehalt);

		try {
			if (!ap.vorhanden(nr)) {
				msg.setText("Personal-Nr. " + nr + " nicht vorhanden");
				return;
			}
			ap.updatePerson(a);
			msg.setText("Person wurde geändert");
		}
		catch (SQLException e) {
			System.err.println(e);
		}
	}

	public void doLoeschen() {
		msg.setText(" ");

		try {
			int nr = Integer.parseInt(t1.getText());
			if (!ap.vorhanden(nr)) {
				msg.setText("Personal-Nr. " + nr + " nicht vorhanden");
				return;
			}
			ap.deletePerson(nr);
			msg.setText("Person wurde gelöscht");
		}
		catch (NumberFormatException e) {
			msg.setText("Personal-Nr. muss eine ganze Zahl sein");
		}
		catch (SQLException e) {
			System.err.println(e);
		}		
	}

	public void doListe(int col) {
		t1.setText("");
		t2.setText("");
		t3.setText("");
		t4.setText("");
		msg.setText(" ");

		try {
			ap.setTabelle(col);
		}
		catch (SQLException e) {
			System.err.println(e);
		}
	}
	
	public void doZuruecksetzen() {
		t1.setText("");
		t2.setText("");
		t3.setText("");
		t4.setText("");
		msg.setText(" ");
	}
	
	class MyMouseListener extends MouseAdapter {
		public void mouseClicked(MouseEvent e) {
			Point p = e.getPoint();
			int col = header.columnAtPoint(p);
			doListe(col);
		}
	}
}

Wie kann ich das machen und wo im Code sollte es hin?
Bin langsam verzweifelt...

FallenAngelNRW
 
Zuletzt bearbeitet:
OK,

ich habe einen ContentPane, darauf liegt ein JPanel, darauf ein JTable mit einer ScrollPane.

Bevor die Tabelle ausgelesen wird, ist ja nur der Tableheader sichtbar und das dahinterleigende Panel.

Wie bekomme ich dort ein Bild (zB. Test.gif) rein?

Bin verzweifelt... ;(
 

Marco13

Top Contributor
Ja, das kann ein bißchen fummelig werden... ich würde versuchen, das Bild in ein JPanel reinzumalen, in dem die ScrollPane und die Table liegt - allerdings muss alles, was in der ScrollPane liegt (d.h. die View und die Table und insbesondere die TableCellRenderer) transparent sein, damit man das Bild durchsieht - ob dann schon reicht, oder ob es noch aufwändiger wird, kann man so im voraus schwer sagen (Wozu zur H*lle braucht man ein Hintergrundbild hinter einer JTable :autsch: ?)
 
Als eine Art SplashScreen.

Beim Programm-Start ist das Bild sichtbar, werden Daten aus der Datenbank abgefragt, dann überlagert der JTable das vorher sichtbare JPanel.

Es funktioniert alles soweit wie es soll, nur ich schaffe es iwie grundsätzlich nicht, unter Java Bilder darzustellen. Ob da später ne Tabelle drüber liegt spielt ja erstmal keine Rolle.
 

VfL_Freak

Top Contributor
Moin,

ich bin mir nicht ganz sicher, ob dies Dein Problem löst, aber ich zeige hier bei meiner Applikation zu Beginn wie folgt einen SplashScreen an :
Java:
public class DlgSplash extends Dialog 
{
	private static final long	serialVersionUID	= 1L;

	Panel panel1 = new Panel();
  BorderLayout borderLayout1 = new BorderLayout();
  JPanel jPanel1 = new JPanel();
  JLabel lblSplash = new JLabel();
  BorderLayout borderLayout2 = new BorderLayout();

  public DlgSplash(Frame frame, String title, boolean modal) 
  {
    super(frame, title, modal);
    enableEvents(AWTEvent.WINDOW_EVENT_MASK);
    try 
    {
      jbInit();
      add(panel1);
      pack();
    }
    catch(Exception ex) 
    {
      ex.printStackTrace();
    }
  }


  public DlgSplash(Frame frame) 
  {
    this(frame, "", false);
  }

  
  public DlgSplash(Frame frame, boolean modal) {
    this(frame, "", modal);
  }

  public DlgSplash(Frame frame, String title) 
  {
    this(frame, title, false);
  }
  
  
  private void jbInit() throws Exception 
  {
    panel1.setLayout(borderLayout1);
    lblSplash.setHorizontalAlignment(SwingConstants.CENTER);
    lblSplash.setIcon(new ImageIcon(DlgSplash.class.getResource("myPic.jpg")));
    jPanel1.setLayout(borderLayout2);
    panel1.add(jPanel1, BorderLayout.CENTER);
    jPanel1.add(lblSplash,  BorderLayout.CENTER);
  }
  
  
  protected void processWindowEvent(WindowEvent e) 
  {
    if (e.getID() == WindowEvent.WINDOW_CLOSING) 
    {
      cancel();
    }
    super.processWindowEvent(e);
  }
  
  void cancel() 
  {
    dispose();
  }
} // DlgSplash

Der Aufruf erfolgt so in meiner mainApp :
Java:
public class mainApp implements Protokoll, Protokoll_lokal
{
	splashFrm splF = new splashFrm();
	public DlgPrePostLogin dlgP = new DlgPrePostLogin(null, true);
	
	//Die Anwendung konstruieren
	public mainApp() 
	{
	    // ...
    Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
		splF.pack();
		Dimension splashSize = splF.getSize();
		splF.setLocation((screenSize.width - splashSize.width) / 2, (screenSize.height - splashSize.height) / 2);
		splF.setVisible(true );

    // es folgt ein Login-Dialog und Kleinkram 
    // ... 
    
    // und dann
    
    if (splF != null) 
    {
	      splF.setVisible( false );
        splF.dispose();
    }

    // ...
}

Gruß
Klaus
 

Marco13

Top Contributor
Ansonsten geht es eher um die Frage, ob die Tabelle das Bild wirklich überlegern soll (also ob man durch die Tabelle durch noch das Bild sehen soll) oder ob das Bild einfach durch die Tabelle ersetzt werden soll. Für letzteres könnte man einfach ein CardLayout verwenden... :bahnhof:
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
Hatsi09 Swing JPanel Bild einfügen AWT, Swing, JavaFX & SWT 14
S JPanel rotieren, Bild ist abgeschnitten, Clipping? AWT, Swing, JavaFX & SWT 0
R 2D-Grafik PNG Bild per Graphics auf JPanel AWT, Swing, JavaFX & SWT 9
A JPanel Bild laden (Porblem mit Dateipfad) AWT, Swing, JavaFX & SWT 2
M Bild in JPanel mit Maus einfügen AWT, Swing, JavaFX & SWT 0
B JPanel und png-Bild AWT, Swing, JavaFX & SWT 2
S Geladenes Bild wird nicht in JPanel angezeigt AWT, Swing, JavaFX & SWT 7
S Swing Bild auf jPanel nach Änderung von JComboBox zeichnen AWT, Swing, JavaFX & SWT 4
V Bild in JPanel AWT, Swing, JavaFX & SWT 2
N JPanel vergrößert sich bei zu großem Bild AWT, Swing, JavaFX & SWT 5
R Swing Bild in JPanel AWT, Swing, JavaFX & SWT 8
J Bild in JPanel nicht angezeigt AWT, Swing, JavaFX & SWT 9
X Swing JLabel mit Bild auf JPanel AWT, Swing, JavaFX & SWT 8
S Schwarzes Bild beim Abspeichern von JPanel AWT, Swing, JavaFX & SWT 12
D Bild in JPanel verschiebt Layout. Wie fixieren? AWT, Swing, JavaFX & SWT 9
S Swing Bild in JPanel in ScrollPane neu zeichnen AWT, Swing, JavaFX & SWT 2
Z 2D-Grafik Bild auf JPanel verschieben AWT, Swing, JavaFX & SWT 4
F Swing Zur Laufzeit Bild laden und auf JPanel anzeigen AWT, Swing, JavaFX & SWT 4
S Beim Painten auf JPanel verschwindet das Bild :( AWT, Swing, JavaFX & SWT 10
N Bild auf JPanel AWT, Swing, JavaFX & SWT 2
V Bild auf JPanel zeichnen AWT, Swing, JavaFX & SWT 9
DStrohma Swing JPanel mit Bild als Hintergrund AWT, Swing, JavaFX & SWT 2
H Bild in JPanel AWT, Swing, JavaFX & SWT 13
C Bild in ein JPanel laden AWT, Swing, JavaFX & SWT 4
H JPanel über bild AWT, Swing, JavaFX & SWT 2
H Button auf Bild/ JLayeredPane in Jpanel AWT, Swing, JavaFX & SWT 15
V Bild wird nicht auf JPanel gezeichnet; Java Problem AWT, Swing, JavaFX & SWT 10
P Bild in JPanel einfügen funktioniert nicht AWT, Swing, JavaFX & SWT 7
Y Bild auf JPanel AWT, Swing, JavaFX & SWT 2
M JavaFX Mandelbrot-bild noch nicht optimiert AWT, Swing, JavaFX & SWT 7
berserkerdq2 Wie füge ich ein Bild in javafx mit dem Scenebuilder ein, das automatisch mitgezogen wird, wenn das Fenster vergrößert wird oder Vollbildmodus AWT, Swing, JavaFX & SWT 6
frager2345 Bild aus Dateien lesen und als Hintergrund verwenden AWT, Swing, JavaFX & SWT 2
T Bild in ein graphics füllen AWT, Swing, JavaFX & SWT 2
N imageIcon zeigt kein Bild an AWT, Swing, JavaFX & SWT 5
B Bild lädt nicht AWT, Swing, JavaFX & SWT 2
izoards Bild ausdrucken - PageFormat setzen geht nicht AWT, Swing, JavaFX & SWT 5
M Bild wird nicht geladen obwohl sie gefunden wird AWT, Swing, JavaFX & SWT 0
V JavaFX Bild leer und keine Fehlermeldung AWT, Swing, JavaFX & SWT 21
D JavaFX Bearbeitetes Bild wird nicht gespeichert AWT, Swing, JavaFX & SWT 9
D JavaFX Größe des Bild an ImageView anpassen AWT, Swing, JavaFX & SWT 3
M Bewegtes Bild im BorderLayout.CENTER AWT, Swing, JavaFX & SWT 6
C Falschfarbenbild (lineare Grauwertspreizung)aus Grauwert-Bild erstellen AWT, Swing, JavaFX & SWT 15
C Kleineres Bild an bestimmte Koordinaten setzen AWT, Swing, JavaFX & SWT 6
S Bild neu skalieren - Bild in Bild speichern? AWT, Swing, JavaFX & SWT 6
N Bild Drehen AWT, Swing, JavaFX & SWT 1
J Bild von anderer Klasse will nicht laden AWT, Swing, JavaFX & SWT 1
M JavaFX Bild zur ImageView in einem Kreis anzeigen. AWT, Swing, JavaFX & SWT 4
T JFrame Bild einfügen AWT, Swing, JavaFX & SWT 9
M Combobox bild anklicken AWT, Swing, JavaFX & SWT 2
cool_brivk24 Swing ImageIcon lädt kein Bild AWT, Swing, JavaFX & SWT 12
L Bild nicht in der Mitte AWT, Swing, JavaFX & SWT 16
B JavaFX Bild um die eigene Achse drehen lassen AWT, Swing, JavaFX & SWT 0
J Swing Bild in Button AWT, Swing, JavaFX & SWT 11
I Bild über FXML (ImageView, Image) anzeigen AWT, Swing, JavaFX & SWT 1
T Image Loader lädt Bild nicht AWT, Swing, JavaFX & SWT 10
stroggi Swing Mehrere transparentes Objekte (Grafiken) über einem Bild (JLabel) darstellen AWT, Swing, JavaFX & SWT 4
P Kein Bild wird angezeigt bei ImageIcon AWT, Swing, JavaFX & SWT 16
T JavaFX Bild in Tabellenzelle AWT, Swing, JavaFX & SWT 2
Ksanatos Swing Bild (.jpg) einlesen und per Button wechseln AWT, Swing, JavaFX & SWT 9
MaxG. Swing Bild Button AWT, Swing, JavaFX & SWT 7
P Swing Bild Skallieren AWT, Swing, JavaFX & SWT 1
P Jframe Bild einfügen, Hintergrund Farbe ändern, und Button schrift Größe ändern AWT, Swing, JavaFX & SWT 2
A Swing Bild wird nicht mehr geladen AWT, Swing, JavaFX & SWT 4
A Swing Gemaltes Bild über saveDialog speichern unter AWT, Swing, JavaFX & SWT 15
S Bild mit ImageIcon auf GUI verkleinern AWT, Swing, JavaFX & SWT 3
T AWT Farben in einem Bild ändern AWT, Swing, JavaFX & SWT 8
I JFrame Bild strecken und auf Bildschirmgröße anpassen AWT, Swing, JavaFX & SWT 2
F Gezeichnetes als bild speichern AWT, Swing, JavaFX & SWT 4
B 2D-Grafik Bild farblich filtern AWT, Swing, JavaFX & SWT 2
B JavaFX ImageView neues Bild zuweisen AWT, Swing, JavaFX & SWT 19
A 2D-Grafik Bild wird nicht neu gezeichnet AWT, Swing, JavaFX & SWT 24
K Bild in JFrame AWT, Swing, JavaFX & SWT 2
S JavaFX Teil eines Bildes ausschneiden / als neues Bild nutzen AWT, Swing, JavaFX & SWT 8
B Swing Unterteiltes JFrame mit Bild in der Mitte AWT, Swing, JavaFX & SWT 4
I Applet BlueJ Applet - Bild mit if-Schleife zeichnen lassen AWT, Swing, JavaFX & SWT 16
Z Bildervorschau, MouseDragged das Bild verschieben AWT, Swing, JavaFX & SWT 1
M JavaFX Ein Bild ohne Rahmen fällt runter? AWT, Swing, JavaFX & SWT 2
G Anonyme Instanz von JXImageView erstellen und mit Bild initialisieren AWT, Swing, JavaFX & SWT 7
M JavaFX - Bild in Jar einbinden, sodass es auch außerhalb der IDE geladen wird. AWT, Swing, JavaFX & SWT 2
M Bild Beschreibung mit ImageIO speichern AWT, Swing, JavaFX & SWT 1
M "ImageIO.read()" liest Bild nicht richtig ein AWT, Swing, JavaFX & SWT 3
I Swing JLabel Bild für 1sec anzeigen lassen AWT, Swing, JavaFX & SWT 13
K Bild in Label wird nicht angezeigt AWT, Swing, JavaFX & SWT 5
C GUI öfters durchlaufen und hinterher Bild speichern AWT, Swing, JavaFX & SWT 1
M AWT Farben in Bild ersetzen AWT, Swing, JavaFX & SWT 11
E JavaFX Bild einfügen AWT, Swing, JavaFX & SWT 6
G paintComponents zerstückelt Bild AWT, Swing, JavaFX & SWT 0
C 2D Grafik ein Bild soll permanent durchlaufen AWT, Swing, JavaFX & SWT 2
1 Textfield: jede Buchstabe ein Bild AWT, Swing, JavaFX & SWT 2
C Bild Koordinaten AWT, Swing, JavaFX & SWT 6
M Bild aus JLabel resizen und speichern AWT, Swing, JavaFX & SWT 0
B Swing Bild von Webseite herunterladen, diese dann in JList anzeigen. AWT, Swing, JavaFX & SWT 1
O 2D-Grafik Bild abgeschnitten nach Rotation mit Affine Transform und Hintergrund Schwarz AWT, Swing, JavaFX & SWT 8
A Swing Malprogramm Bild speichern? AWT, Swing, JavaFX & SWT 9
U Bild innerhalb hatml code anzeigen AWT, Swing, JavaFX & SWT 5
Y JavaFX Bild speichern und Pfad dazu abspeichern AWT, Swing, JavaFX & SWT 2
L 2D-Grafik Bild in Richtung Maus drehen AWT, Swing, JavaFX & SWT 18
C Bild in JFrame AWT, Swing, JavaFX & SWT 8
T AWT Bild laden und transparent zeichnen AWT, Swing, JavaFX & SWT 2
I SWT Bilder, bzw. ein einzelnes Bild AWT, Swing, JavaFX & SWT 6

Ähnliche Java Themen

Neue Themen


Oben