2011-03-06 27 views
3

我有一個JTable組件。在一列中,我插入HTML代碼,如果此列中的某一行比列寬度長,則文本將被包裝。是否可以關閉包裝?是否可以關閉JTable中的文字封裝?

@sandlex

public Object getValueAt(int row, int col) { 
      return new String(
        "<html>dgdfsgsdfg dfgdsfg sdfgs dfgsdfgsdfgsdfgsd afsdf asdfasd</html>"); 
     } 

檢查你的代碼使用此功能。它將以幾行顯示文本 - 不是一個。

+1

你想讓文字做什麼呢?簡單地被切斷? – 2011-03-06 18:52:27

+0

我猜OP在超過屏幕寬度時正在尋找一個水平滾動條來顯示。 – asgs 2011-03-11 23:46:29

回答

2

有沒有可能看看你的代碼?

例如,在這個簡單的例子沒有被包裹:

public class TableTest { 

    public static void main(String[] args) { 
     JFrame frm = new JFrame(); 

     TableModel dataModel = new AbstractTableModel() { 

      public int getColumnCount() { 
       return 10; 
      } 

      public int getRowCount() { 
       return 10; 
      } 

      public Object getValueAt(int row, int col) { 
       return new String(
        "<a href=\"127.0.0.1\">row*col*1000000000</a>"); 
      } 
     }; 

     JTable table = new JTable(dataModel); 

     table.getColumnModel().getColumn(2).setMaxWidth(120); 
     table.getColumnModel().getColumn(2).setPreferredWidth(120); 
     table.getColumnModel().getColumn(2).setMinWidth(120); 

     frm.getContentPane().add(table); 
     frm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frm.setPreferredSize(new Dimension(300, 300)); 
     frm.pack(); 
     frm.setVisible(true); 

    } 
} 

編輯@latata 您可以嘗試創建自己的CellRenderer和玩它應用到所需的列:

table.getColumnModel().getColumn(0).setCellRenderer(new NonWrappedCellRenderer()); 

渲染器可能如下所示:

class NonWrappedCellRenderer extends JTextArea implements TableCellRenderer { 

    @Override 
    public Component getTableCellRendererComponent(
        JTable table, 
        Object value, 
        boolean isSelected, 
        boolean hasFocus, 
        int row, 
        int column) { 
      this.setText((String)value); 
      this.setLineWrap(false);     
      return this; 
    } 
} 

這裏行不會的Cuz JTextArea中默認使用

setLineWrap(false) 

包裹的問題是JTextArea中無法正確顯示HTML標籤,我可以看到。所以你會以某種方式解決這個問題。您可以嘗試使用JTextPane或其他可以處理標記的東西,並檢查它是否具有包裝屬性。 或者,您可以通過手來計算字體指標,單元格寬度和修剪文本。

+0

+1很好的例子,但我認爲你需要在' ...'標記中包含你的'getValueAt()'結果並且省略'new String()',例如'return「 row」+ row +「,col」+ col +「」'。另外,'getContentPane()'會自動轉發。 – trashgod 2011-03-06 21:55:48

+0

檢查我的編輯請 – latata 2011-03-10 17:30:15

+0

檢查我的編輯.. – sandlex 2011-03-11 23:44:26

相關問題