如何在JInternalFrame中的ScrollPane中动态设置JTable的宽度

时间:2014-03-11 15:20:49

标签: java swing jtable jscrollpane jinternalframe

我对使用JTable有点怀疑。

这就是我想要的:

  • 在我的JTable中设置一个没有最大化窗口的水平ScroollBar。
  • 要查看每个列的最大宽度(或列标题或单元格中的文本)。
  • 根据JTable的宽度扩展我的窗口(我不知道是否可能)。

这就是我:

  • 没有水平ScrollBar的Jtable(如果我把“myTable.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);”,我的表不占用JInternalFrame的所有宽度)
  • 如果单元格大小很长,我的Jtable不会显示单元格中的所有数据。

我将不胜感激。

AplicacionesInternalFrame:

public AplicacionesJInternalFrame() 
{
      super("Aplicaciones", 
              true, //resizable
              true, //closable
              true, //maximizable
              true);//iconifiable

      //...Create the GUI and put it in the window...

      //...Then set the window size or call pack...
      //setSize(300,300);

      //Set the window's location.
      setLocation(xOffset*openFrameCount, yOffset*openFrameCount);
      getContentPane().add(createToolBar(),BorderLayout.NORTH);

      jTableAplicaciones = new JTable(new AplicacionesTableModel());        
      jTableAplicaciones.getColumnModel().getColumn(0).setCellRenderer(new AplicacionesRenderer());
      jTableAplicaciones.setPreferredScrollableViewportSize(new Dimension(500, 270));
      jTableAplicaciones.setFillsViewportHeight(true);

      JScrollPane scrollPane = new JScrollPane(jTableAplicaciones);
      scrollPane.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED); 
      scrollPane.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED);

      initColumnSizes(jTableAplicaciones);
      //jTableAplicaciones.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);

      add(scrollPane);        
      pack();
}


private void initColumnSizes(JTable table) {
    TableColumn column = null;
    Component comp = null;
    int headerWidth = 0;
    TableCellRenderer headerRenderer =
        table.getTableHeader().getDefaultRenderer();

    int width = 0;
    for (int i = 0; i < table.getColumnCount(); i++) 
    {           
        /* Tamaño dato de celda */
        TableCellRenderer renderer = table.getCellRenderer(0, i);
        Component componente = table.prepareRenderer(renderer, 0, i);
        int componenteWidth = componente.getPreferredSize().width;

        /* Tamaño cabecera columna */
        column = table.getColumnModel().getColumn(i);
        comp = headerRenderer.getTableCellRendererComponent(
                null, column.getHeaderValue(),
                false, false, 0, 0);            
        headerWidth = comp.getPreferredSize().width;
        column.setPreferredWidth(Math.max(headerWidth, componenteWidth)+2);
    }        
}

如果您需要任何其他数据,请告诉我。 提前谢谢。

1 个答案:

答案 0 :(得分:1)

  

如果单元格大小很长,我的Jtable不会显示单元格中的所有数据。

您可以使用Table Column Adjuster确保所有列都合适。但是,这不会强制表填充整个宽度。