2016-07-22 42 views
0

儘管我已將setResizingAllowed()設置爲true,但我無法通過在標題列之間移動光標並拖動分隔線來調整列寬。JTable Swing:我無法通過在標題中拖動光標來調整列的大小

tbResumen = new JTable(); 
tbResumen.setEnabled(false); 

tbResumen.setRowHeight(20); 
tbResumen.setBackground(UIManager.getColor("Table.selectionBackground")); 
tbResumen.setBorder(new BevelBorder(BevelBorder.LOWERED, null, null, null, null)); 
tbResumen.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR)); 
tbResumen.setFont(new Font("Arial", Font.PLAIN, 12)); 
tbResumen.setDefaultRenderer(Object.class, new RenderTablaInfo()); 
tbResumen.setOpaque(false); 

tbResumen.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); 
tbResumen.setColumnSelectionAllowed(false); 
tbResumen.setRowSelectionAllowed(true); 

tbResumen.setSize(new Dimension(840, 450)); 
tbResumen.setPreferredScrollableViewportSize(new Dimension(840, 450)); 

tbResumen.setAutoResizeMode(JTable.AUTO_RESIZE_OFF); 

tbResumen.setModel(new DefaultTableModel(new Object[][] {{ label1, label2, label3, label4} }, 
new String[] { "foo", "bar", "foobar", "barfoo" })); 

final JTableHeader headerResumen = new JTableHeader(); 
headerResumen.setReorderingAllowed(false); 
headerResumen.setResizingAllowed(true); 
headerResumen.setColumnModel(tbResumen.getColumnModel()); 

headerResumen.setTable(tbResumen); 
tbResumen.setTableHeader(headerResumen); 

如果有人需要更多代碼來澄清情況,我會盡快添加它們。謝謝。

+3

*「任何想法?」*爲了更好地提供幫助,請張貼[MCVE]或[簡短,獨立,正確的示例](http://www.sscce.org/)。 –

+0

閱讀鏈接後編輯問題。如果之後有任何想法......謝謝。 – FaithReaper

+2

你顯然不明白鏈接,因爲不可編譯的代碼片段可能是M,但不是C,V或E的問題。請注意,如果真正需要製作完整,可編譯和可運行的示例,則適當的MCVE可能爲150 LOC。一個好的MCVE測試如下。將'MCVE'粘貼到IDE中的新項目中。編譯乾淨,運行它看問題。 –

回答

1
  1. 確保你的頭是一個你將要配置。

所以,用:

JTableHeader headerResumen = tbResumen.getTableHeader(); 
headerResumen.setResizingAllowed(true); 

我只是創建另一頭與我的表的同一model,做配置那裏,卻沒有意識到我創建的新報頭是不是我的表的。我必須致電table.getTableHeader()以獲取我想要的標題並且配置可以正常工作。對不起,愚蠢。

  1. 確保在將鼠標懸停在此表格中的列之間的邊緣上時,將光標設置爲默認光標,以便您可以看到它成爲雙向箭頭,並且您意識到他們是可調整的。

    tbResumen.setCursor(Cursor.getPredefinedCursor(CURSOR_DEFAULT));

如果你將其設置爲CURSOR_HAND,沒有雙向光標將不會顯示。

  • autoResizingMode也可以觸發 「問題」,使其更難調整寬度。當它被設置爲OFF時,拖動列邊時,它可能會移動,但不是自由的。請務必將autoResizingMode設置爲JTable.AUTO_RESIZE_SUBSEQUENT_COLUMNSJTable.AUTO_RESIZE_NEXT_COLUMN以查看可觀的更改。

  • (半年後,當我回到我的回答,我還是覺得有用...) 如果禁用JScrollPane包含表時,光標不會改變都不是,而不是雙向光標將被顯示。

  • 2

    目前尚不清楚你的碎片在哪裏出錯。下面最小的競爭示例顯示了一個表,其列可以調整大小但不能重新排序。尤其要注意的是tbResumen顯示在JScrollPane中。

    image

    import java.awt.Dimension; 
    import java.awt.EventQueue; 
    import javax.swing.JFrame; 
    import javax.swing.JScrollPane; 
    import javax.swing.JTable; 
    import javax.swing.table.DefaultTableModel; 
    import javax.swing.table.JTableHeader; 
    
    /** 
    * @see http://stackoverflow.com/a/38524632/230513 
    */ 
    public class Test { 
    
        private void display() { 
         JFrame f = new JFrame("Test"); 
         f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    
         JTable tbResumen = new JTable(); 
         tbResumen.setPreferredScrollableViewportSize(new Dimension(400, 100)); 
         tbResumen.setAutoResizeMode(JTable.AUTO_RESIZE_OFF); 
         tbResumen.setModel(new DefaultTableModel(new Object[][]{ 
          {"label1", "label2", "label3", "label4"}}, 
          new String[]{"foo", "bar", "foobar", "barfoo"})); 
         JTableHeader headerResumen = tbResumen.getTableHeader(); 
         headerResumen.setReorderingAllowed(false); 
    
         f.add(new JScrollPane(tbResumen)); 
         f.pack(); 
         f.setLocationRelativeTo(null); 
         f.setVisible(true); 
        } 
    
        public static void main(String[] args) { 
         EventQueue.invokeLater(new Test()::display); 
        } 
    } 
    
    +0

    謝謝你的回答,但是我發現了其他的東西。將它放在下面。 – FaithReaper

    相關問題