문제

기존 JTable을 기존 JFFF로 채우려고합니다.테이블이 원래 JFFFFFR에 다시 전달되면 CellRenderer 서식 (IT 형식)은 셀렉렌더 서식 (IT 형식)이 유지되지 않으면 모두 잘 작동하지 않습니다.데이터는 괜찮지 만 서식이 실패합니다.

그러나 populatetable_new2 루틴 전반에 걸쳐 유지됩니다.

나는 다음과 같은 일상을 가지고있다 :

public static void startFormPopulateResourcesTable2() throws
        SQLException, ParseException {
    String SQL;

    SQL = "SELECT tbl_deals.ID, tbl_stocks.stock_name AS Stock, ";
    SQL = SQL + "tbl_deals.purchase_date AS `Purchase Date`, ";
    SQL = SQL + "tbl_premium_types.premium_type AS Type, ";
    SQL = SQL + "tbl_deals.share_quantity AS Qty, ";
    SQL = SQL + "tbl_deals.total_cost_of_purchase AS `Total ";
    SQL = SQL + "Purchase Cost`, tbl_deals.sell_date AS ";
    SQL = SQL + "`Sale Date`, tbl_stocks.ID, ";
    SQL = SQL + "tbl_deals.purchase_share_price AS `Original ";
    SQL = SQL + "Share Price`, tbl_deals.target_share_price_today ";
    SQL = SQL + "AS `Target Price Today`, ";
    SQL = SQL + "tbl_deals.target_share_price_30_days AS `Target ";
    SQL = SQL + "Price 30 Days`, tbl_stocks.web_site_link, ";
    SQL = SQL + "tbl_stocks.forum_web_site_address FROM ";
    SQL = SQL + "tbl_premium_types INNER JOIN (tbl_stocks INNER ";
    SQL = SQL + "JOIN tbl_deals ON tbl_stocks.ID = ";
    SQL = SQL + "tbl_deals.stock_id) ON tbl_premium_types.ID = ";
    SQL = SQL + "tbl_stocks.premium_type_id ORDER BY ";
    SQL = SQL + "tbl_stocks.stock_name";
    theModules.FormMessages.setStart_forumWebSiteAddressColumnNumber(12);
    theModules.FormMessages.setStart_stockIDColumnNumber(7);
    theModules.FormMessages.setStart_WebSiteAddressListBoxColumn(11);

    int[] visibleColumnNumbers;
    visibleColumnNumbers = new int[5];
    visibleColumnNumbers[0] = 0;
    visibleColumnNumbers[1] = 6;
    visibleColumnNumbers[2] = 7;
    visibleColumnNumbers[3] = 11;
    visibleColumnNumbers[4] = 12;

    int[] currencyColumnNumbers;
    currencyColumnNumbers = new int[4];
    currencyColumnNumbers[0] = 5;
    currencyColumnNumbers[1] = 8;
    currencyColumnNumbers[2] = 9;
    currencyColumnNumbers[3] = 10;

    Statement stmt = DBase.Connect1.DoConnect();
    Admin.FormControllers.populateTable_new2(SQL,
            theModules.FormMessages.getStart_tblDeals(),
            visibleColumnNumbers, stmt, currencyColumnNumbers);

}
.

...이 하나는 다음을 부릅니다.

public static void populateTable_new2(String SQL, javax.swing.JTable thisTable, int[] invisibleColumnNumbers, Statement stmt, int[] currencyColumnNumbers) throws SQLException, ParseException {
    Statement thisSTMT;
    thisSTMT = DBase.Connect1.DoConnect();
    ResultSet rst;
    rst = thisSTMT.executeQuery(SQL);
    int theRowCount;
    DefaultTableModel thisDefaultTableModel;
    ResultSetMetaData meta = rst.getMetaData();
    int numberOfColumns = meta.getColumnCount();
    theRowCount
            = DBase.DatabaseValidation.countOfRecordsetRecordsWithUndefinedTable(SQL,
                    stmt);

    String[] theColumnName = new String[numberOfColumns];
    for (int n = 0; n < numberOfColumns; n++) {
        theColumnName[n] = meta.getColumnLabel(n + 1);
    }

    Object[][] theTableData = new Object[theRowCount][numberOfColumns];
    int n = 0;
    while (rst.next()) {

        for (int nn = 0; nn < numberOfColumns; nn++) {
            theTableData[n][nn] = rst.getString(nn + 1);
        }
        n = n + 1;
    }

    thisDefaultTableModel = new DefaultTableModel(theTableData,
            theColumnName);

    thisTable.setModel(thisDefaultTableModel);

    for (n = 0; n < thisTable.getColumnCount(); n++) {
        for (int nn = 0; nn < currencyColumnNumbers.length; nn++) {
            if (currencyColumnNumbers[nn] == n) {
                TableColumn thisColumn;
                thisColumn = thisTable.getColumnModel().getColumn(n);
                TableCellRenderer renderer = new FormatRenderer(NumberFormat.getCurrencyInstance());
                thisColumn.setCellRenderer(renderer);
            }
        }

        for (int nn = 0; nn < invisibleColumnNumbers.length; nn++) {
            if (invisibleColumnNumbers[nn] == n) {
                TableColumn thisColumn;
                thisColumn = thisTable.getColumnModel().getColumn(n);
                thisColumn.setMinWidth(0);
                thisColumn.setMaxWidth(0);
                thisColumn.setWidth(0);
                thisColumn.setPreferredWidth(0);
            }
        }

    }
}
.

테이블이 원래 JFFFR에 다시 전달되면 셀 서식이 계속 작동하도록 도와 드리겠습니다.감사합니다

도움이 되었습니까?

해결책

JTABLE에 새 TableModel을 만들고 추가 할 때마다 새 TableColumnModel이 새 데이터와 일치하도록 만들어 지므로 TableColumn에 할당 한 사용자 지정 렌더러가 손실됩니다.

그러나 populatetable_new2 루틴 전반에 걸쳐 유지됩니다.

이 루틴에서 TableModel을 테이블에 추가 한 후 TableColumn에 렌더러를 추가합니다.

모든 것은 테이블이 원래 JFFFFR에 다시 전달되면 셀렉렌더 서식 (IT 형식)이 유지되지 않으면 유지되지 않습니다.

이 명령문을 실제로 이해하지 못하지만 테이블에 새 모델을 추가하지만 렌더러를 TableColumns에 할당하지는 않지만 다시 한 번 다시 한번 다시 작성하는 것 같습니다.

또는 모델의 구조가 동일하고 데이터가 변경되는 것으로 가정 한 다음 처음으로 변경하면 tableModel로 jtable을 만드는 후에 다음을 사용할 수 있습니다.

table.setAutoCreateColumnsFromModel(false);  
.

및 tablecolumnmodel은 테이블에 대한 새 모델을 사용할 때마다 재현되지 않습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top