setLocation Problem

dodlhuat

Mitglied
Ich hab folgendes Problem:
Ich habe eine Klasse Gui extends JFrame, und dort geb ich für das Frame mit this.setSize(x,y) die Größe an, was noch super funktioniert, aber wenn ich dann die Position mit this.setLocation angeben will, bleibt das Fenster trotzdem immer in der linken oberen Ecke! Wenn man aber die Location des Fenster abfragt bekomme ich die richtigen Werte. Woran kann das liegen!?
Danke schonmal für die Hilfe...
 
Hab das Problem leider noch immer nicht gelöst... egal wann ich setLocation aufrufe, das Fenster klebt immer in der linken oberen Ecke... Hat keiner eine Ahnung woran das liegen könnte!?
 
Rufst du die Methode auch wircklich auf, befor du show() aufrufst?
Schonmal ein repaint() probiert?

Ansonsten: Poste doch mal den Code
 
Bilder(Code) sag(t)en mehr als 1000 Worte.
Ich glaube es wäre hilfreich wenn du den Code posten würdest, da man so nur raten kann...
 
Ok, dann hier mal der Code... Wär wirklich dankbar wenn ich meinen blöden Fehler endlich finden würd... ist wahrscheinlich eh was einfaches, nur find ichs nicht.

public class Gui extends JFrame {

private static final long serialVersionUID = 1L;
private JButton exitButton = null;
private JScrollPane jScrollPane = null;
private JTable jTable = null;
private Connection con = null;
private ResultSet rs = null;
private JComboBox jComboBox_daten = null;
private JLabel jLabel_Datenbank = null;
MedModel mmodel = new MedModel();
PhaModel pmodel = new PhaModel();
private JButton jButton_add = null;
private JButton jButton_delete = null;
private String mode = "Medikamente";
private static Log log = LogFactory.getLog(Gui.class);
private JButton jButton_search = null;
Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
private JPanel jPanel_Inhalt = null;
private JButton jButton_edit = null;
JFrame frame;

/**
* Constructor
*/
public Gui() {
initialize();
}

/**
* Initialisierung der Oberflaeche
*/
public void initialize() {
this.setSize(700, 400);
this.setLocation(200,100);
this.setContentPane(getJPanel_Inhalt());
this.setTitle("Apotheke");
this.setResizable(false);
}
 
Hallo dodlhuat, wenn du das nächste mal code schreibst achte doch bitte darauf das du ihn in [.CODE] oder [.JAVA] tags schreibst, so kann man das ganze nur schwer lesen.

Ich hab mich mal kurz über deinen Code hergemacht und bei mir zeigt der alles richtig an und setzt das .setLocation(x,y) auch richtig um. Jedoch habe ich auch die .setContentPane() ausgeklammert, wobei diese Methode aber noch Interessant wäre! Ich weiß Leider auch nicht ob du das ganze direkt aufrust so wie ich es gemacht. Du kannst ja mal nur mein Beispiel hernehmen oder bei die nach und nach manche Methoden oder deklarationen rausnehmen dann müsstest du sehen woran dein Problem liegt.

Java:
import javax.swing.JFrame;

public class Gui extends JFrame {

	JFrame frame;
	
	/**
	* Constructor
	*/
	public Gui() {
	initialize();
	}
	
	/**
	* Initialisierung der Oberflaeche
	*/
	public void initialize() {
		this.setSize(700, 400);
		this.setLocation(700,200);
		//this.setContentPane(getJPanel_Inhalt());
		this.setTitle("Apotheke");
		this.setResizable(false);
	}
	
	public static void main(String[] args){
		Gui g = new Gui();
		g.setVisible(true);
	}
}

Du kannst ja mal noch mehr vom Code posten, wenn dich mein
Ansatz nicht weiter bringt.

Gruss

Ben
 
Zuletzt bearbeitet von einem Moderator:
Ok, ich habs jetzt in allen meinen anderen Fenstern hinbekommen, aber da find ich einfach nicht wo der Fehler liegt. Ich nehm mal an das ich irgendwo das Fenster neu zeichne... aber ich finds einfach nicht. Ist auch schon ziemlich unübersichtlich geworden das ganze... Wär super wenn mir wer sagt wo ich's verhau...
Danke schonmal...

Java:
package gui;

import javax.swing.JPanel;
import javax.swing.JFrame;
import java.awt.GridBagLayout;
import javax.swing.JTable;
import java.awt.GridBagConstraints;
import java.awt.Dimension;
import java.awt.Toolkit;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import javax.swing.JOptionPane;
import javax.swing.JScrollPane;
import javax.swing.JButton;
import javax.swing.JComboBox;
import hsql.hsql_con;
import java.awt.Insets;
import javax.swing.JLabel;
import model.*;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

public class Gui extends JFrame {

	private static final long serialVersionUID = 1L;
	private JButton exitButton = null;
	private JScrollPane jScrollPane = null;
	private JTable jTable = null;
	private Connection con = null;
	private ResultSet rs = null;
	private JComboBox jComboBox_daten = null;
	private JLabel jLabel_Datenbank = null;	
	MedModel mmodel = new MedModel();
	PhaModel pmodel = new PhaModel();
	private JButton jButton_add = null;
	private JButton jButton_delete = null;
	private String mode = "Medikamente";
	private static Log log = LogFactory.getLog(Gui.class);
	private JButton jButton_search = null;
	Dimension d = Toolkit.getDefaultToolkit().getScreenSize(); //Bildschirmgroesse
	private JPanel jPanel_Inhalt = null;
	private JButton jButton_edit = null;
	JFrame frame;
	
	/**
	 * Constructor
	 */
	public Gui() {
		initialize();
	}

	/**
	 * Initialisierung der Oberflaeche
	 */
	public void initialize() {		
		this.setSize(700, 400);
                this.setLocation(d.width/2,d.height/2);
		this.setContentPane(getJPanel_Inhalt());
		this.setTitle("Apotheke");
		this.setResizable(false);
	}

	/**
	 * Initialisierung von exitButton. Bei aktivierung wird die Datenbank beendet
	 * und das Programm geschlossen.
	 * @return javax.swing.exitButton	
	 */
	private JButton getexitButton() {
		if (exitButton == null) {
			exitButton = new JButton();
			exitButton.setText("Exit");
			exitButton.addActionListener(new java.awt.event.ActionListener() {
				public void actionPerformed(java.awt.event.ActionEvent e) {
					try {					
						hsql.hsql_con.Shutdown(con); //beendet die verbindung mit der datenbank
						System.exit(0);
					} catch (SQLException e1) {
						e1.printStackTrace();
					}
				}
			});
		}
		return exitButton;
	}
	
	/**
	 * Initialisierung von jComboBox_daten. Je nach Auswahl wird die entsprechende
	 * Datenbank geladen.
	 * @return javax.swing.JComboBox	
	 */
	private JComboBox getJComboBox_daten() {
		if (jComboBox_daten == null) {
			jComboBox_daten = new JComboBox();
			jComboBox_daten.addItem("Medikamente");
			jComboBox_daten.addItem("Pharmabetriebe");
			jComboBox_daten.addItemListener(new ItemListener() {
				public void itemStateChanged(ItemEvent ie) {
					if (ie.getStateChange() == ItemEvent.SELECTED) {
						
						jButton_delete.setEnabled(false);
						jButton_edit.setEnabled(false);

						if (ie.getItem()=="Medikamente") {
							jTable.setModel(mmodel);
							mode = ie.getItem().toString();
							log.info("Changing Database...");
							try {
								rs = hsql.hsql_con.SelectAllMed(con);
							} catch (SQLException e) {
								e.printStackTrace();
							}
							updateM(mmodel, rs, con);
						}
						else {
							jTable.setModel(pmodel);
							mode = ie.getItem().toString();
							log.info("Changing Database...");
							try {
								rs = hsql.hsql_con.SelectAllPha(con);
							} catch (SQLException e) {
								e.printStackTrace();
							}
							updateP(pmodel, rs, con);					
						}							
					}
				}				
			});
		}
		return jComboBox_daten;
	}

	/**
	 * Initialisiert jLabel_Datenbank	
	 * @return javax.swing.JLabel	
	 */
	private JLabel getJLabel_Datenbank() {
		if (jLabel_Datenbank == null) {
			jLabel_Datenbank = new JLabel();
			jLabel_Datenbank.setText("Datenbank:");
		}
		return jLabel_Datenbank;
	}

	/**
	 * Initialisiert jScrollPane1	
	 * @return javax.swing.JScrollPane	
	 */
	private JScrollPane getJScrollPane() {
		if (jScrollPane == null) {
			jScrollPane = new JScrollPane();
			jScrollPane.setViewportView(getJTable());
		}
		return jScrollPane;
	}

	/**
	 * Initialisiert jTable.
	 * @return javax.swing.JTable	
	 */
	private JTable getJTable() {
		
		if(jTable == null)
		{
			try {
				con = hsql.hsql_con.start();
				rs = hsql.hsql_con.SelectAllMed(con);		
				mmodel = hsql_con.getDataMed(rs);
				rs = hsql.hsql_con.SelectAllPha(con);
				pmodel = hsql.hsql_con.getDataPha(rs);
			} catch (ClassNotFoundException e) {
				e.printStackTrace();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
		if (jTable == null) {
			jTable = new JTable(mmodel);
			jTable.addMouseListener(new java.awt.event.MouseAdapter() {
				public void mouseClicked(java.awt.event.MouseEvent e) {
					updateButtonStatus();
				}
			});
			jTable.setAutoCreateRowSorter(true); //auto-sortierung
		}
		return jTable;
	}

	/**
	 * Initialisiert jButton_add. Bei aktivierung wird je nach Modus das richtige
	 * Fenster aktiviert.
	 * @return javax.swing.JButton
	 */
	private JButton getJButton_add() {
		if (jButton_add == null) {
			jButton_add = new JButton();
			jButton_add.setText("Hinzufügen");
			jButton_add.addActionListener(new java.awt.event.ActionListener() {
				public void actionPerformed(java.awt.event.ActionEvent e) {
					
					if (mode == "Medikamente") {
						NewMed medi = new NewMed(con, mmodel, pmodel);
						medi.setVisible(true);
					}
					else if (mode == "Pharmabetriebe") {
						NewPha phar = new NewPha(con, pmodel);
						phar.setVisible(true);
					}
					
					else {
						log.info("Ungültiger Modus");
					}
				}
			});
		}
		return jButton_add;
	}

	/**
	 * Initialisiert jButton_delete. Durch aktivieren des Buttons wird eine Loesch-
	 * abfrage gestartet. Je nach Antwort wird geloescht, oder nicht.
	 * @return javax.swing.JButton	
	 */
	private JButton getJButton_delete() {
		if (jButton_delete == null) {
			jButton_delete = new JButton();
			jButton_delete.setText("Löschen");
			jButton_delete.setEnabled(false);
			jButton_delete.addActionListener(new java.awt.event.ActionListener() {
				public void actionPerformed(java.awt.event.ActionEvent e) {
					
					Object[] options = {"Ja", "Nein"};
					int n = JOptionPane.showOptionDialog(frame,
                            "Wirklich löschen?",
                            "Frage",
                            JOptionPane.YES_NO_OPTION,
                            JOptionPane.QUESTION_MESSAGE,
                            null,
                            options,
                            options[0]);
					if (n == JOptionPane.YES_OPTION) {
						delete();	
					}
					else {
						
					}
				}
			});
		}
		return jButton_delete;
	}
	
	/**
	 * Fuehrt ein Update der Pharmabetrieb Datenbank durch
	 * @param pmodel2 TableModel
	 * @param rs2 ResultSet
	 * @param con2 Connection
	 */
	public static void updateP(PhaModel pmodel2, ResultSet rs2, Connection con2) {
		
		try {
			log.info("Updating...");
			pmodel2.removeAll();
			pmodel2 = hsql.hsql_con.getDataPha(rs2);
		} catch (SQLException e) {
			e.printStackTrace();
		}	
	}

	/**
	 * Fuehrt ein Update der Medikmanete Datenbank durch
	 * @param mmodel2 TableModel
	 * @param rs2 ResultSet
	 * @param con2 Connection
	 */
	public static void updateM(MedModel mmodel2, ResultSet rs2, Connection con2) {		
			
			try {
				log.info("Updating...");
				mmodel2.removeAll();
				mmodel2 = hsql.hsql_con.getDataMed(rs2);
			} catch (SQLException e) {
				e.printStackTrace();
			}
			
	}
	
	/**
	 * Fuehrt ein Update des delete_button und edit_button Status durch
	 */
	private void updateButtonStatus() {
		if (jTable.getSelectedRowCount() == 1) {
			jButton_delete.setEnabled(true);
			jButton_edit.setEnabled(true);
		} else {
			jButton_delete.setEnabled(false);
			jButton_edit.setEnabled(false);
		}
	}
	
	/**
	 * startet die Loeschoperation eines Datensatzes aus der Datenbank je nach
	 * dem laufenden Modus.
	 */
	private void delete() {
		//TODO: Wenn noch Medikamente vom Pharmabetrieb hergestellt werden wird der nicht gelöscht
		int row = jTable.getSelectedRow();
		String str = jTable.getValueAt(row, 0).toString();
		String name = jTable.getValueAt(row, 1).toString();
			if (mode == "Medikamente") {
				try {
					hsql.hsql_con.deleteM(str, con, rs, mmodel);
					JOptionPane.showMessageDialog(frame, "Datensatz '"+name+"' wurde gelöscht!");
				} catch (SQLException e) {
					e.printStackTrace();
				}
			}
			else {
				try {
					hsql.hsql_con.deleteP(str, con, rs, pmodel);
					JOptionPane.showMessageDialog(frame, "Pharmabetrieb '"+name+"' gelöscht");
				} catch (SQLException e) {
					e.printStackTrace();
				}
			}
	}

	/**
	 * Initialisiert jButton_search. Durch druecken des Buttons wird je nach
	 * Modus das passende Suchfenster geoeffnet.
	 * @return javax.swing.JButton	
	 */
	private JButton getJButton_search() {
		if (jButton_search == null) {
			jButton_search = new JButton();
			jButton_search.setText("Suchen");
			jButton_search.addActionListener(new java.awt.event.ActionListener() {
				public void actionPerformed(java.awt.event.ActionEvent e) {
					if (mode == "Medikamente") {
						SearchMed smed = new SearchMed(con, mmodel);
						smed.setVisible(true);
					}
					else {
						SearchPha spha = new SearchPha(con, pmodel);
						spha.setVisible(true);
					}
				}
			});
		}
		return jButton_search;
	}

	/**
	 * Initialisiert jPanel_Inhalt
	 * @return javax.swing.JPanel	
	 */
	private JPanel getJPanel_Inhalt() {
		if (jPanel_Inhalt == null) {
			
			GridBagConstraints gridBagConstraints_edit = new GridBagConstraints();
			gridBagConstraints_edit.gridx = 0;
			gridBagConstraints_edit.insets = new Insets(10, 0, 155, 0);
			gridBagConstraints_edit.fill = GridBagConstraints.HORIZONTAL;
			gridBagConstraints_edit.gridy = 4;
			
			GridBagConstraints gridBagConstraints_scroll = new GridBagConstraints();
			gridBagConstraints_scroll.gridx = 1;
			gridBagConstraints_scroll.insets = new Insets(10, 0, 0, 0);
			gridBagConstraints_scroll.fill = GridBagConstraints.BOTH;
			gridBagConstraints_scroll.gridheight = 4;
			gridBagConstraints_scroll.gridy = 1;
			
			GridBagConstraints gridBagConstraints_delete = new GridBagConstraints();
			gridBagConstraints_delete.gridx = 0;
			gridBagConstraints_delete.fill = GridBagConstraints.HORIZONTAL;
			gridBagConstraints_delete.insets = new Insets(10, 0, 0, 0);
			gridBagConstraints_delete.gridy = 2;
			
			GridBagConstraints gridBagConstraints_search = new GridBagConstraints();
			gridBagConstraints_search.gridx = 0;
			gridBagConstraints_search.fill = GridBagConstraints.HORIZONTAL;
			gridBagConstraints_search.gridheight = 1;
			gridBagConstraints_search.insets = new Insets(10, 0, 0, 0);
			gridBagConstraints_search.gridy = 3;
			
			GridBagConstraints gridBagConstraints_add = new GridBagConstraints();
			gridBagConstraints_add.gridx = 0;
			gridBagConstraints_add.fill = GridBagConstraints.HORIZONTAL;
			gridBagConstraints_add.insets = new Insets(50, 0, 0, 0);
			gridBagConstraints_add.gridy = 1;
			
			GridBagConstraints gridBagConstraints_exit = new GridBagConstraints();
			gridBagConstraints_exit.gridx = 2;
			gridBagConstraints_exit.insets = new Insets(0, 0, 0, 0);
			gridBagConstraints_exit.gridy = 0;
			
			GridBagConstraints gridBagConstraints_daten = new GridBagConstraints();
			gridBagConstraints_daten.fill = GridBagConstraints.VERTICAL;
			gridBagConstraints_daten.gridy = 0;
			gridBagConstraints_daten.weightx = 1.0;
			gridBagConstraints_daten.gridwidth = 1;
			gridBagConstraints_daten.insets = new Insets(0, 0, 0, 350);
			gridBagConstraints_daten.ipadx = 150;
			gridBagConstraints_daten.ipady = 0;
			gridBagConstraints_daten.gridheight = 1;
			gridBagConstraints_daten.gridx = 1;
			
			GridBagConstraints gridBagConstraints_label = new GridBagConstraints();
			gridBagConstraints_label.gridx = 0;
			gridBagConstraints_label.anchor = GridBagConstraints.NORTH;
			gridBagConstraints_label.insets = new Insets(5, 0, 0, 0);
			gridBagConstraints_label.gridy = 0;
			
			jPanel_Inhalt = new JPanel();
			jPanel_Inhalt.setLayout(new GridBagLayout());
			jPanel_Inhalt.add(getJLabel_Datenbank(), gridBagConstraints_label);
			jPanel_Inhalt.add(getJComboBox_daten(), gridBagConstraints_daten);
			jPanel_Inhalt.add(getexitButton(), gridBagConstraints_exit);
			jPanel_Inhalt.add(getJButton_add(), gridBagConstraints_add);
			jPanel_Inhalt.add(getJButton_search(), gridBagConstraints_search);
			jPanel_Inhalt.add(getJButton_delete(), gridBagConstraints_delete);
			jPanel_Inhalt.add(getJScrollPane(), gridBagConstraints_scroll);
			jPanel_Inhalt.add(getJButton_edit(), gridBagConstraints_edit);
		}
		return jPanel_Inhalt;
	}

	/**
	 * Initialisiert jButton_edit	
	 * @return javax.swing.JButton	
	 */
	private JButton getJButton_edit() {
		if (jButton_edit == null) {
			jButton_edit = new JButton();
			jButton_edit.setEnabled(false);
			jButton_edit.setText("Bearbeiten");
			jButton_edit.addActionListener(new java.awt.event.ActionListener() {
				public void actionPerformed(java.awt.event.ActionEvent e) {
					edit();
				}
			});
		}
		return jButton_edit;
	}

	/**
	 * liest die Daten aus der Tabelle aus und uebergibt sie an die passende
	 * Funktion und aktiviert das Bearbeitungsfenster.
	 */
	protected void edit() {
		
		int row = jTable.getSelectedRow();
		
		if (mode == "Medikamente") {
			String str_id = jTable.getValueAt(row, 0).toString();
			String str_name = jTable.getValueAt(row, 1).toString();
			String str_hid = jTable.getValueAt(row, 2).toString();
			String str_preis = jTable.getValueAt(row, 3).toString();
			String str_bestand = jTable.getValueAt(row, 4).toString();
			String str_best = jTable.getValueAt(row, 5).toString();
			String str_datum = jTable.getValueAt(row, 6).toString();
			EditMed medi = new EditMed(con, mmodel, str_id, str_name, str_hid, str_preis, str_bestand, str_best, str_datum);
			medi.setVisible(true);
		}
		
		else if (mode == "Pharmabetriebe"){
			String str_id = jTable.getValueAt(row, 0).toString();
			String str_name = jTable.getValueAt(row, 1).toString();
			String str_tel = jTable.getValueAt(row, 2).toString();
			String str_str = jTable.getValueAt(row, 3).toString();
			String str_plz = jTable.getValueAt(row, 4).toString();
			String str_ort = jTable.getValueAt(row, 5).toString();
			EditPha phar = new EditPha(con, pmodel, str_id, str_name, str_tel, str_str, str_plz, str_ort);
			phar.setVisible(true);
		}
		
		else log.info("Ungültiger Modus");
	}

}
 
aber ich finds einfach nicht. Ist auch schon ziemlich unübersichtlich geworden das ganze...

Stimmt, und das ist auch schon das erste Indiz dafür das dein Code nicht gerade der beste ist. Da ich viele der imports nicht auf meinem PC habe und die Datenbank auch nicht muss ich ihn erst zerpflücken und vieles auskommentieren, das ist wahrscheinlich auch der Grund wieso bei mir das ganze ohne Probleme funktioniert und bei dir so ein komischer Seiteneffekt auftritt.
Kleiner Tipp von mir: Lager die Datenbank verbindung doch in eine oder mehrere andere Klassen aus, das kostet dir später weniger Zeit beim warten des codes und es treten nicht so schnell unerwartete Situationen auf. (normal sollte bis auf den Logger nichts außer den swing und awt-klassen importiert werden, soviel als Hilfe).

Ich kann jetzt wieder nur raten, aber versuch mal das .setLocation(x,y); als letzte Methode von initialize() aufzurufen (also nach setResizable(false))

Anonsten: Sql Code auslagern und den Code der Gui.java (und die verwendeten Klassen von model.*) danach nochmal posten, dann kann man da mit dem debug durchsteppen.

Gruss Ben
 
Zuletzt bearbeitet von einem Moderator:
Zurück