如何在jinternalframe的滚动窗格中动态设置jtable的宽度

bvjveswy  于 2021-07-09  发布在  Java
关注(0)|答案(1)|浏览(331)

我对使用jtable有点怀疑。
这就是我想要的:
在没有最大化窗口的jtable中设置水平scroollbar。
查看具有最大可能宽度的每一列(或单元格中的列标题或文本)。
根据jtable的宽度来扩展我的窗口(我不知道是否可能)。
我有:
一个没有水平滚动条的jtable(如果我把“mytable.setautoresizemode(jtable.auto_resize_off);”,我的table并没有占据整个框架的宽度)
如果jtable的大小很长,它不会显示单元格中的所有数据。
我将感谢任何帮助。
实用的内部框架:

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);
    }        
}

如果你需要其他资料,请告诉我。提前谢谢。

xlpyo6sf

xlpyo6sf1#

如果jtable的大小很长,它不会显示单元格中的所有数据。
可以使用表列调整器来确保所有列都是适当的。但是,这不会强制表格填充整个宽度。

相关问题