簡體   English   中英

如何使帶有mySQL數據的jtable出現在選項卡式窗格中,而不是顯示在單獨的窗口中?

[英]How do I make a jtable with mySQL data appear in my tabbed pane instead of in a seperate window?

我第一次使用Java NetBeans創建自己的簡單銷售點系統。 我有此代碼:

package pos_system;

import java.awt.*;
import java.sql.*;
import java.util.*;
import javax.swing.*;
import javax.swing.table.*;

public class Table extends JFrame
{
    public Table()
    {
       ArrayList columnNames = new ArrayList();
       ArrayList data = new ArrayList();

       //  Connect to an MySQL Database, run query, get result set
       String url = "jdbc:mysql://localhost:3306/mydb";
       String userid = "root";
       String password = "nbuser";
       String sql = "SELECT * FROM inventorytable";


       try (Connection connection = DriverManager.getConnection( url,   userid, password );
          Statement stmt = connection.createStatement();
          ResultSet rs = stmt.executeQuery( sql ))
        {
              ResultSetMetaData md = rs.getMetaData();
              int columns = md.getColumnCount();

          //  Get column names
            for (int i = 1; i <= columns; i++)
            {
                columnNames.add( md.getColumnName(i) );
            }

        //  Get row data
            while (rs.next())
            {
                ArrayList row = new ArrayList(columns);

                for (int i = 1; i <= columns; i++)
                {
                    row.add( rs.getObject(i) );
                }

                data.add( row );
            }
        }
        catch (SQLException e)
       {
            System.out.println( e.getMessage() );
       }

    // Create Vectors and copy over elements from ArrayLists to them
    // Vector is deprecated but I am using them in this example to keep 
    // things simple - the best practice would be to create a custom defined
    // class which inherits from the AbstractTableModel class
    Vector columnNamesVector = new Vector();
    Vector dataVector = new Vector();

    for (int i = 0; i < data.size(); i++)
    {
        ArrayList subArray = (ArrayList)data.get(i);
        Vector subVector = new Vector();
        for (int j = 0; j < subArray.size(); j++)
        {
            subVector.add(subArray.get(j));
        }
        dataVector.add(subVector);
    }

    for (int i = 0; i < columnNames.size(); i++ )
        columnNamesVector.add(columnNames.get(i));

        //  Create table with database data    
        JTable table = new JTable(dataVector, columnNamesVector)
        {
            public Class getColumnClass(int column)
            {
               for (int row = 0; row < getRowCount(); row++)
                {
                    Object o = getValueAt(row, column);

                    if (o != null)
                    {
                        return o.getClass();
                    }
                }

                return Object.class;
            }
        };

        JScrollPane scrollPane = new JScrollPane( table );
        getContentPane().add( scrollPane );

        JPanel buttonPanel = new JPanel();
        getContentPane().add( buttonPanel, BorderLayout.SOUTH );
    }

 public static void main(String[] args)
 {
        Table frame = new Table();
        frame.setDefaultCloseOperation( EXIT_ON_CLOSE );
        frame.pack();
        frame.setVisible(true);
    }
   }

它創建了我需要的jtable ,但與My Jframe一個單獨的類中,該類具有我希望jtable出現的選項卡式窗格。 如何將此類連接到選項卡式窗格,或者還有另一種顯示表格的方式?

通過使類擴展JFrame,迫使您創建和顯示JFrame(通常需要更大的靈活性),您正在畫一個角落。 實際上,我會冒險地說,我創建的大多數Swing GUI代碼都不會擴展JFrame,實際上,很少有人願意這樣做。 更常見的是,您的GUI類將面向創建JPanels,然后將其放置到JFrames或JDialogs或JTabbedPanes中,或者在需要時通過CardLayouts進行交換。 這將大大增加GUI編碼的靈活性。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM