Zum Inhalt springen

Probleme mit JTable


dark-lost-soul

Empfohlene Beiträge

Hi,

ich habe mittlerweile die JTable auf meinem Frame und die Daten sind sogar auch schon drin.

So nun zu meinen Problemen:

- Scollbars werden nicht angezeigt obwohl ich den dafür nötigen Befehl benutzt habe

- Die Spaltenbreite lässt sich irgendwie nicht ändern

- Und die Spaltennamen werden mir auch nicht angezeigt :(

Hoffentlich könnt ihr mir weiterhelfen

Hier die Init methode für die Gui

    public void initFrame(){

    	//Menü zusammenbauen

    	JMenuBar menubar = new JMenuBar();

	//File

		JMenu menu = new JMenu("File");

		JMenuItem menuItem = new JMenuItem(S_LOAD);

		menuItem.addActionListener(this);

		menu.add(menuItem);

		menu.addSeparator();

		menuItem = new JMenuItem(S_CLS);

		menuItem.addActionListener(this);

		menu.add(menuItem);

		menubar.add(menu);

	//Configure

		menu = new JMenu("Configure");

		menuItem = new JMenuItem(S_SET);

		menuItem.addActionListener(this);

		menu.add(menuItem);

		menubar.add(menu);

	//Help

		menu = new JMenu("Help");

		menuItem = new JMenuItem(S_HELP);

		menuItem.addActionListener(this);

		menu.add(menuItem);

		menu.addSeparator();

		menuItem = new JMenuItem(S_ABOUT);

		menuItem.addActionListener(this);

		menu.add(menuItem);

		menubar.add(menu);

		setJMenuBar(menubar);

	//setzen des Layouts

		this.setLayout(new BorderLayout());

	//einfügen der Tabelle

		aTable = new JTable(new DefaultTableModel());

		aTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);

		aTable.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);

		this.add(aTable, BorderLayout.CENTER);

		JTableHeader header = aTable.getTableHeader();

	    header.setUpdateTableInRealTime(true);

		header.setReorderingAllowed(false);

    }

aTable ist global deklariert und hier die methode die die Tabelle mit Daten füttert
	protected void onOpenTable(){

		String sqlDriver = "com.microsoft.jdbc.sqlserver.SQLServerDriver";

		String sqlConnStr = "jdbc:microsoft:sqlserver://GXDEFR-S3007;DatabaseName=LIMS_View;User=LIMS_View;Password=xxx";

		String query = "SELECT * FROM neueDaten1198";

		String[] tableColumsName = new String[42];

		DefaultTableModel aModel = (DefaultTableModel) aTable.getModel();


		try{

			Class.forName(sqlDriver);

			System.out.println("Database driver loaded");

		}

		catch (ClassNotFoundException ce){	

			System.out.println("ClassNotFound-FEHLER: " + ce.getMessage());	

		}

		try{		

			Connection con = DriverManager.getConnection(sqlConnStr);

	    	Statement stmt = con.createStatement();

	    	ResultSet rs = stmt.executeQuery(query);

//----------------------------------------------------

			// Loop through the ResultSet and transfer in the Model

			java.sql.ResultSetMetaData rsmd = rs.getMetaData();

			int colNo = rsmd.getColumnCount();

			for(int i=0; i<colNo; i++)

				tableColumsName[i]=rsmd.getColumnName(i+1);

			for(int i=0; i<colNo; i++)

				aTable.getColumnModel().getColumn(i).setPreferredWidth(1000);

			aModel.setColumnIdentifiers(tableColumsName);

			while(rs.next()){

 				Object[] objects = new Object[colNo];

 				for(int i=0; i<colNo; i++){

  					objects[i]=rs.getObject(i+1);

  				}

 				aModel.addRow(objects);

			}

			aTable.setModel(aModel);	

//----------------------------

	    	rs.close();

	    	stmt.close();

	    }

	    catch (SQLException e){

	   		System.out.println("SQL-FEHLER: " + e.getMessage());	

	   	}	

	}

für eure hilfe danke ich euch im vorraus

greetz

dark

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ich denke mal das sind diese 2 hier wobei beim ersten nur der untere teil relevant ist

  public void initFrame(){

    	//Menü zusammenbauen


	//setzen des Layouts

		this.setLayout(new BorderLayout());

	//einfügen der Tabelle

		aTable = new JTable(new DefaultTableModel());

		aTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);

		JScrollPane scrollPane = new JScrollPane(aTable);

		aTable.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);

		this.add(aTable, BorderLayout.CENTER);

		JTableHeader header = aTable.getTableHeader();

	    header.setUpdateTableInRealTime(true);

		header.setReorderingAllowed(false);

    }
hab mal den teil rausgenommen wo das menü zusammen gebaut wird und hier noch der teil wo die daten in die tabelle kommen
	protected void onOpenTable(){

		String sqlDriver = "com.microsoft.jdbc.sqlserver.SQLServerDriver";

		String sqlConnStr = "jdbc:microsoft:sqlserver://GXDEFR-S3007;DatabaseName=LIMS_View;User=LIMS_View;Password=xxxxxxxxxxx";

		String query = "SELECT * FROM neueDaten1198";

		String[] tableColumsName = new String[45];

		DefaultTableModel aModel = (DefaultTableModel) aTable.getModel();


		try{

			Class.forName(sqlDriver);

			System.out.println("Database driver loaded");

		}

		catch (ClassNotFoundException ce){	

			System.out.println("ClassNotFound-FEHLER: " + ce.getMessage());	

		}

		try{		

			Connection con = DriverManager.getConnection(sqlConnStr);

	    	Statement stmt = con.createStatement();

	    	ResultSet rs = stmt.executeQuery(query);

//----------------------------------------------------

			// Loop through the ResultSet and transfer in the Model

			java.sql.ResultSetMetaData rsmd = rs.getMetaData();

			int colNo = rsmd.getColumnCount();

			for(int i=0; i<colNo; i++)

				tableColumsName[i]=rsmd.getColumnName(i+1);

			//for(int i=0; i<colNo; i++)

			//	(aTable.getColumn(tableColumsName[i])).setPreferredWidth(100);

			aModel.setColumnIdentifiers(tableColumsName);

			while(rs.next()){

 				Object[] objects = new Object[colNo];

 				for(int i=0; i<colNo; i++){

  					objects[i]=rs.getObject(i+1);

  				}

 				aModel.addRow(objects);

			}

			aTable.setModel(aModel);

			aTable.repaint();


//----------------------------

	    	rs.close();

	    	stmt.close();

	    }

	    catch (SQLException e){

	   		System.out.println("SQL-FEHLER: " + e.getMessage());	

	   	}	

	}

Link zu diesem Kommentar
Auf anderen Seiten teilen

Das Problem ist das JTables einfach so groß sind wie sie sein müssen um ihre Daten anzuzeigen. Sie zeichnen sich dann einfach mehr oder weniger im nicht sichtbaren Bereich weiter. Wie der User das sichtbar machen kann ist der JTable absolut wurscht.

Deshalb erstellst du ein JScrollPane, also eine große Fläche, die aber in deinen Anzeigebereich passt und setzt da rein dann die JTable mit ihrere X-beliebigen wahrscheinlich übertriebenen Größe.

Damit dein JScrollPane auch angezeigt wird addest du das ansteller der direkten JTable in dein Frame.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...