2011-02-09 66 views

回答

2

我不會顯示標籤裏面的這個JTable,但是代替了這個JTable。

嘗試從其容器中刪除表格元素,然後添加帶有消息的Jlabel。

當用戶運行另一個查詢,取得了積極的效果,在相反的方向(移除標籤,添加表)

1

只需添加文本模式,你會noramlly做,然後創建一個自定義呈現。喜歡的東西:

DefaultTableCellRenderer centerRenderer = new DefaultTableCellRenderer(); 
centerRenderer.setHorizontalAlignment(JLabel.CENTER); 
table.getColumnModel().getColumn(???).setCellRenderer(centerRenderer); 

或者,如果你想爲中心,包含字符串數據中的所有列,那麼你可以使用

table.getDefaultRenderer(class.String); 

,然後重置該渲染器的校準。

編輯:我誤解了這個問題。

如果您只想在表中顯示一條消息,則可以將該表的TableModel更改爲僅顯示帶有單行的單列表並顯示錯誤消息。此列仍然需要使用自定義渲染器。

要重置你只是做了模型:

DefaultTableModel model = new DefaultTableModel(...); 
table.setModel(model); 

當然,如果查詢是全成,你也必須重新設置新的數據模型,以及。

1

另一種替代方法:如果沒有行,則可以在表格而不是行中真正繪製一些 - 適當定位的文本。爲了實現這一目標

  • 子焦耳/ X /表和重寫paintComponent
  • 確保表格被擴展到視口的大小(即tracksViewportHeight是真實的,那是JXTable在默認情況下,必須顯式設置JTable中)

    @Override 
    protected void paintComponent(Graphics g) { 
        super.paintComponent(g); 
        if (getRowCount() > 0) 
         return; 
    
        Component comp = getNoDataRenderer(); 
        CellRendererPane rendererPane = getRendererPane(); 
    
        Dimension size = getSize(); 
        Dimension prefSize = comp.getPreferredSize(); 
    
        Rectangle rect = new Rectangle((size.width - prefSize.width)/2, 
          size.height/4, prefSize.width, prefSize.height); 
        rendererPane.paintComponent(g, comp, this, rect); 
    
    } 
    
    private Component getNoDataRenderer() { 
        if (noDataRenderer == null) { 
         noDataRenderer = createNoDataRenderer(); 
        } 
    String localizedNoData = UIManager.getString("noData"); 
    Component comp = noDataRenderer.getTableCellRendererComponent(this, 
        localizedNoData != null ? localizedNoData : "No Data Available", 
        false, false, -1, -1); 
        Font bigger = getFont().deriveFont(Font.BOLD | Font.ITALIC, 
          getFont().getSize2D() * 2); 
        comp.setFont(bigger); 
        return comp; 
    } 
    
    private DefaultTableCellRenderer createNoDataRenderer() { 
        DefaultTableCellRenderer renderer = new DefaultTableCellRenderer(); 
        renderer.setForeground(Color.GRAY); 
        return renderer; 
    } 
    
    private CellRendererPane getRendererPane() { 
        for (int i = 0; i < getComponentCount(); i++) { 
         if (getComponent(i) instanceof CellRendererPane) { 
          return (CellRendererPane) getComponent(i); 
         } 
        } 
        return null; 
    } 
    

優勢,較其他建議(可以說,這是我的2當然美分:):

  • 交換機組件(標籤vs表):可能會混淆用戶的不連續視覺效果。一張空桌仍然是一張桌子。
  • 特殊的空模型:解決數據領域中的視圖問題是...次優。加上需要特別注意的是不要鬆動真實模型的柱狀態