擦除 JTable BOTTOM 白色边框

发布于 2024-11-19 13:35:35 字数 3028 浏览 5 评论 0原文

擦除边框和标题后,我的 JTable 看起来像这样:

在此处输入图像描述

如您所见,可以看到白色边框在表的底部,我在我的代码中看不到发生这种情况的原因。我怎样才能删除它?

JTable 的代码是:

Object[][] datosMeasurements = {};
    DefaultTableModel model = new DefaultTableModel(datosMeasurements, nombresColumnasTablas);
    tablaMeasurements = new JTable(model){
      public boolean isCellEditable(int rowIndex, int colIndex) {
            if(colIndex==1){
                return true;
            }
            return false;   //Disallow the editing of any cell
      }
    };
    model.addTableModelListener(new CambioTablaMeasurementListener());
    TableCellRenderer rendererMeasurements = new paramRenderer();
    tablaMeasurements.setDefaultRenderer(Object.class, rendererMeasurements);
    ((DefaultCellEditor) tablaMeasurements.getDefaultEditor(Object.class)).setClickCountToStart(1);

    JScrollPane scrollMeasurements = new JScrollPane(tablaMeasurements);
    tablaMeasurements.setTableHeader(null);
    scrollMeasurements.setColumnHeaderView(null);
    tablaMeasurements.setPreferredScrollableViewportSize(new Dimension(100,100));

其渲染器的代码是:

class paramRenderer extends DefaultTableCellRenderer
{
    private final DecimalFormat formatter = new DecimalFormat( "#.000" );
    public Component getTableCellRendererComponent(
                    JTable table,
                    Object value,
                    boolean isSelected,
                    boolean hasFocus,
                    int row,
                    int column)
    {
        //value = formatter.format((Number)value);
        super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);

        setEnabled(table == null || table.isEnabled());

        if (column == 0)
            setHorizontalAlignment( RIGHT );
        else if (column == 1)
            setHorizontalAlignment( CENTER );
        else
            setHorizontalAlignment( LEFT );    

        for (int i=0; i<3; i++) {
              TableColumn columna = table.getColumnModel().getColumn(i);
              if (i==0) columna.setPreferredWidth(65);
              if (i==1) columna.setPreferredWidth(75);
              if (i==2) columna.setPreferredWidth(30);
            }

        if(isSelected)
        {
            setBackground(table.getBackground());
            setForeground(table.getForeground());
            if (row==0 || row==2) setBackground(new java.awt.Color(211, 217, 255));
            else setBackground(java.awt.Color.white); 
        }
        else
        {
            setBackground(table.getBackground());
            setForeground(table.getForeground());
            if (row==0 || row==2) setBackground(new java.awt.Color(211, 217, 255));
            else setBackground(java.awt.Color.white); 
        }

        return this;
    }
    public void setValue() {    
        formatter.setMinimumFractionDigits(1);
        formatter.setMaximumFractionDigits(3);
    }
}

}

After erasing borders and headers, my JTable looks like this:

enter image description here

As you can see, a white border is seen at the bottom of the table, and I see no reason at my code for this to happen. How can I erase that?

The code for the JTable is:

Object[][] datosMeasurements = {};
    DefaultTableModel model = new DefaultTableModel(datosMeasurements, nombresColumnasTablas);
    tablaMeasurements = new JTable(model){
      public boolean isCellEditable(int rowIndex, int colIndex) {
            if(colIndex==1){
                return true;
            }
            return false;   //Disallow the editing of any cell
      }
    };
    model.addTableModelListener(new CambioTablaMeasurementListener());
    TableCellRenderer rendererMeasurements = new paramRenderer();
    tablaMeasurements.setDefaultRenderer(Object.class, rendererMeasurements);
    ((DefaultCellEditor) tablaMeasurements.getDefaultEditor(Object.class)).setClickCountToStart(1);

    JScrollPane scrollMeasurements = new JScrollPane(tablaMeasurements);
    tablaMeasurements.setTableHeader(null);
    scrollMeasurements.setColumnHeaderView(null);
    tablaMeasurements.setPreferredScrollableViewportSize(new Dimension(100,100));

And for its renderer:

class paramRenderer extends DefaultTableCellRenderer
{
    private final DecimalFormat formatter = new DecimalFormat( "#.000" );
    public Component getTableCellRendererComponent(
                    JTable table,
                    Object value,
                    boolean isSelected,
                    boolean hasFocus,
                    int row,
                    int column)
    {
        //value = formatter.format((Number)value);
        super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);

        setEnabled(table == null || table.isEnabled());

        if (column == 0)
            setHorizontalAlignment( RIGHT );
        else if (column == 1)
            setHorizontalAlignment( CENTER );
        else
            setHorizontalAlignment( LEFT );    

        for (int i=0; i<3; i++) {
              TableColumn columna = table.getColumnModel().getColumn(i);
              if (i==0) columna.setPreferredWidth(65);
              if (i==1) columna.setPreferredWidth(75);
              if (i==2) columna.setPreferredWidth(30);
            }

        if(isSelected)
        {
            setBackground(table.getBackground());
            setForeground(table.getForeground());
            if (row==0 || row==2) setBackground(new java.awt.Color(211, 217, 255));
            else setBackground(java.awt.Color.white); 
        }
        else
        {
            setBackground(table.getBackground());
            setForeground(table.getForeground());
            if (row==0 || row==2) setBackground(new java.awt.Color(211, 217, 255));
            else setBackground(java.awt.Color.white); 
        }

        return this;
    }
    public void setValue() {    
        formatter.setMinimumFractionDigits(1);
        formatter.setMaximumFractionDigits(3);
    }
}

}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

樱娆 2024-11-26 13:35:35

根据 rowHeight 计算 prefScrollableViewportSize ,类似于

int visibleRowCount = 10;
table.setPreferredScrollableViewportSize(
     new Dimension(myWidth, visibleRowCount * table.getRowHeight()));

calculate the prefScrollableViewportSize in terms of rowHeight, something like

int visibleRowCount = 10;
table.setPreferredScrollableViewportSize(
     new Dimension(myWidth, visibleRowCount * table.getRowHeight()));
浅浅 2024-11-26 13:35:35

这可能是表“viewPort”。您可以尝试:

yourTable.setFillsViewportHeight(true);

That is probable the tables "viewPort". You can try with:

yourTable.setFillsViewportHeight(true);
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文