defaulttablemodel setcolumnidentifiers

CConraths

Aktives Mitglied
Hallo
meine Spaltenüberschriften werden nicht angezeigt


Java:
package zaehlerstaende;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JRadioButton;
import javax.swing.JScrollPane;
import javax.swing.JTabbedPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;

import java.awt.BorderLayout;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;

public class myTabbedPane {

    private Connection con;
    private ResultSet rs;
    private java.sql.Statement stmt;
    private JPanel panel_Liste = new JPanel();
    private int rowCount = 0;
    JButton btnSpeichern = new JButton("Speichern");

    public static void main(String[] args) throws SQLException {
        JFrame myFrame = new JFrame();
        myFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        myTabbedPane mtp = new myTabbedPane();       
        //Connection zur Datenbank aufbauen
        mtp.create_connection();
        
        //Daten holen
        Zaehlerstand zs_main[] = mtp.read_data("strom");   
        
        //neue TabbedPane
        JTabbedPane tabbedPane = new JTabbedPane(JTabbedPane.TOP);
        //Adding TabbedPane LayoutPolicy
        tabbedPane.setTabLayoutPolicy(JTabbedPane.SCROLL_TAB_LAYOUT);
        //TabPlacement
        tabbedPane.setTabPlacement(JTabbedPane.TOP);
        
         //fuellen Liste
        mtp.fuelle_panel_Liste(zs_main);   
        
        //Adding our First Panel Object
        JPanel pnl_Strom = new JPanel();
        
        //Adding our component to the Panel
        pnl_Strom.add(mtp.panel_Liste);
        JPanel pnl_Gas = new JPanel();
        //Setting boundary values for the tabs
        tabbedPane.setBounds(50, 50, 200, 200);
        
        //Naming and adding our Pane
        tabbedPane.add("Strom", pnl_Strom);
        GridBagLayout gbl_pnl_Strom = new GridBagLayout();
        gbl_pnl_Strom.columnWidths = new int[]{0};
        gbl_pnl_Strom.rowHeights = new int[]{0};
        gbl_pnl_Strom.columnWeights = new double[]{Double.MIN_VALUE};
        gbl_pnl_Strom.rowWeights = new double[]{Double.MIN_VALUE};
        pnl_Strom.setLayout(gbl_pnl_Strom);
        
        //Naming and adding our Pane
        tabbedPane.add("Gas", pnl_Gas);
        GridBagLayout gbl_pnl_Gas = new GridBagLayout();
        gbl_pnl_Gas.columnWidths = new int[]{0};
        gbl_pnl_Gas.rowHeights = new int[]{0};
        gbl_pnl_Gas.columnWeights = new double[]{Double.MIN_VALUE};
        gbl_pnl_Gas.rowWeights = new double[]{Double.MIN_VALUE};
        pnl_Gas.setLayout(gbl_pnl_Gas);         
        //Setting Frame's position to the center
        myFrame.getContentPane().add(tabbedPane, BorderLayout.CENTER);
        //Setting FRame'sSize
        myFrame.setSize(800, 800);
        //Setting visibility asTrue
        myFrame.setVisible(true);       
    }
    public void create_connection(){       
          try {
            con = DriverManager.getConnection("jdbc:mariadb://localhost:3306/Zaehlerstaende","root","Malibu88!mariadb");
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
    public Zaehlerstand[] read_data(String nameOfTable) throws SQLException {
        // Statement mit Benennung der Tabelle
        String query = "SELECT * FROM " + nameOfTable + " ORDER BY ID";
      
        java.sql.Statement st = con.createStatement();
        rs = st.executeQuery(query);
        int columns = rs.getMetaData().getColumnCount();
      
        while (rs.next()) {
             rowCount++;
        }
        rs = st.executeQuery(query);
        System.out.println("Alle Einträge zu den Personen ");
        System.out.println();
        // Ich zeige die Tabellenspaltennamen an.
        for (int i = 1; i <= columns; i++)
            System.out.print(rs.getMetaData().getColumnLabel(i) + "\t\t");
        System.out.println();
        System.out.println();

        Zaehlerstand[] my_zs = new Zaehlerstand[rowCount];
        // Ich zeige den Inhalt der Tabelle an. Normaler Weise würde man die
        // Ergebnisse in eine Liste schreiben und diese zurück liefern.
        while (rs.next()) {
            my_zs[rs.getRow()-1] = new Zaehlerstand();
            my_zs[rs.getRow()-1].setZeitstempel(rs.getTimestamp(1));
            my_zs[rs.getRow()-1].setZaehlerstand_alt(rs.getInt(2));         
        }
        return my_zs;
    }
    public void close_connection() throws SQLException {
         // Ich schließe die Streams wieder und gebe die Tabelle wieder frei.
        try {
            if  (rs != null) {
              rs.close();
            }       
        } catch (SQLException e) {
            e.printStackTrace();
        }
        try {
            if (stmt != null) {
              stmt.close();
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
   }
    private void fuelle_panel_Liste(Zaehlerstand[] zs_main) {
        GridBagLayout gbl_panel_Liste = new GridBagLayout();
        gbl_panel_Liste.columnWidths = new int[]{0, 0};
        gbl_panel_Liste.rowHeights = new int[]{0, 0, 0};
        gbl_panel_Liste.columnWeights = new double[]{1.0, Double.MIN_VALUE};
        gbl_panel_Liste.rowWeights = new double[]{1.0, 1.0, Double.MIN_VALUE};
        panel_Liste.setLayout(gbl_panel_Liste);
        
        JScrollPane scrollPane = new JScrollPane();
        GridBagConstraints gbc_scrollPane = new GridBagConstraints();
        gbc_scrollPane.insets = new Insets(5, 5, 5, 5);
        gbc_scrollPane.fill = GridBagConstraints.BOTH;
        gbc_scrollPane.gridx = 0;
        gbc_scrollPane.gridy = 1;
        panel_Liste.add(scrollPane, gbc_scrollPane);
      
        DefaultTableModel model = new DefaultTableModel();
        // Die Titel der Spalten setzen
        model.setColumnIdentifiers( new String[]{ "Datum", "Zählerstand alt", "Zählerstand neu", "Differenz" });
        for( int r = 0 ; r < rowCount ; r++ ){
            Object[] row = new Object[ model.getColumnCount() ];           
            for( int c = 0; c < row.length; c++ ){
                switch(c){
                case 0:
                     row[c] = zs_main[r].getZeitstempel();
                    break;
                case 1:
                    row[c] = zs_main[r].getZaehlerstand_neu();
                    break;
                case 2:
                    row[c] = zs_main[r].getZaehlerstand_alt();
                    break;
                case 3:
                    row[c] = zs_main[r].getDifferenz();
                    break;
                default:
                    break;
                }
            }           
            model.addRow( row );
            System.out.println(model.getValueAt(0, 0));
        }
        JTable table = new JTable(model);
        GridBagConstraints gbc_table = new GridBagConstraints();
        gbc_table.insets = new Insets(5, 5, 5, 5);
        gbc_table.fill = GridBagConstraints.BOTH;
        gbc_table.gridx = 0;
        gbc_table.gridy = 0;
        panel_Liste.add(table, gbc_table);   
    }
}

der inhalt des tablemodels wird in der tabbedpane angezeigt
aber die Überschrift fehlt
habe schon gegoogelt keine Lösung gefunden

danke fürs helfen
 

Jw456

Top Contributor
Etwas wie setTitle( ) fürst du nicht aus auf dein "tabbedPane"
Vergiebst also gar keinen Tittel Überschrift.

Java:
tabbedPane.add("Strom", pnl_Strom);
wenn add nicht geht versuche mal addTab.
 
Zuletzt bearbeitet:

Oneixee5

Top Contributor
Du kannst einen Konstruktor wie DefaultTableModel(Object[] columnNames, int rowCount) (rowCount kann ja auch 0 sein) verwenden oder du leitest von AbstractTableModel selbst dein Model ab. Das halte ich für den besseren Weg. Das rumgewurstel mit den Arrays Zaehlerstand[] kannst du dir komplett sparen. Hier: while (rs.next()) {...} kannst du das Model direkt befüllen und als Rückgabe der Methode verwenden.
 

CConraths

Aktives Mitglied
Etwas wie setTitle( ) fürst du nicht aus auf dein "tabbedPane"
Vergiebst also gar keinen Tittel Überschrift.

Java:
tabbedPane.add("Strom", pnl_Strom);
wenn add nicht geht versuche mal addTab.
das mache ich doch beim Construkter der tabbedpane oder ????

Java:
//Naming and adding our Pane
        tabbedPane.add("Gas", pnl_Gas);

es geht ja auch nicht um die tabbedpane sondern um meine liste
 

CConraths

Aktives Mitglied
hier liegt der Hase im Pfeffer

Java:
String[] titles = new String[columns];
        for (int i = 1; i <= columns; i++) {
            titles[i-1] = rs.getMetaData().getColumnLabel(i);
        }
        
        model.setColumnIdentifiers( titles);
 

X5-599

Top Contributor
setColumnIdentifiers scheint schon zu passen.

Dein Problem ist wohl "by Design" keines. Der Header der JTable (JTableHeader) wird erst angezeigt wenn eine Komponente sie explizit darstellen will.
Das passiert zum Beispiel wenn die JTable in einer JScrollPane liegt. Es wird automatisch der JTableHeader als Column Header View des JScrollPanes gesetzt und somit auch angezeigt.

Wenn man kein JScrollPane verwenden möchte müsste man den JTableHeader selber anzeigen. JTableHeader ist auch nur eine JComponent.

Beispiel mit JScrollPane:

Code:
public class JTableTest
{
	public JTableTest()
	{
		JFrame f = new JFrame();
		
		DefaultTableModel model = new DefaultTableModel();
		model.setColumnIdentifiers( new String[]{ "Datum", "Zählerstand alt", "Zählerstand neu", "Differenz" });
		model.addRow(new String[] {"01.01.2022", "100", "1000", "900"});
		model.addRow(new String[] {"02.01.2022", "1000", "2000", "1000"});
		model.addRow(new String[] {"03.01.2022", "2500", "3000", "500"});
		
		
		JTable table = new JTable(model);
		f.add(new JScrollPane(table), BorderLayout.CENTER);
		
		f.pack();
		f.setLocationRelativeTo(null);
		f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		f.setVisible(true);
	}
	
	public static void main(String[] args)
	{
		SwingUtilities.invokeLater(new Runnable() {
			@Override
			public void run()
			{
				new JTableTest();
			}
		});
	}

}


Beispiel ohne JScrollPane:
Code:
public class JTableTest
{
	public JTableTest()
	{
		JFrame f = new JFrame();
		
		DefaultTableModel model = new DefaultTableModel();
		model.setColumnIdentifiers( new String[]{ "Datum", "Zählerstand alt", "Zählerstand neu", "Differenz" });
		model.addRow(new String[] {"01.01.2022", "100", "1000", "900"});
		model.addRow(new String[] {"02.01.2022", "1000", "2000", "1000"});
		model.addRow(new String[] {"03.01.2022", "2500", "3000", "500"});
		
		
		JTable table = new JTable(model);
		f.add(table, BorderLayout.CENTER);
		f.add(table.getTableHeader(), BorderLayout.NORTH);
		f.pack();
		f.setLocationRelativeTo(null);
		f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		f.setVisible(true);
	}
	
	public static void main(String[] args)
	{
		SwingUtilities.invokeLater(new Runnable() {
			@Override
			public void run()
			{
				new JTableTest();
			}
		});
	}

}
 

Ähnliche Java Themen

Neue Themen


Oben