Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 擦除JTable底部白色边框_Java_Swing_Jtable_Jscrollpane - Fatal编程技术网

Java 擦除JTable底部白色边框

Java 擦除JTable底部白色边框,java,swing,jtable,jscrollpane,Java,Swing,Jtable,Jscrollpane,删除边框和标题后,我的JTable如下所示: 正如您所看到的,在表的底部可以看到一个白色边框,我认为在我的代码中没有理由发生这种情况。我怎么才能把它抹掉 JTable的代码是: Object[][] datosMeasurements = {}; DefaultTableModel model = new DefaultTableModel(datosMeasurements, nombresColumnasTablas); tablaMeasurements = new JT

删除边框和标题后,我的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);
    }
}
class paramRenderer扩展了DefaultTableCellRenderer
{
私有最终DecimalFormat格式化程序=新的DecimalFormat(“#.000”);
公共组件GetTableCellRenderComponent(
JTable表,
对象值,
他当选了,,
布尔聚焦,
int row,
int列)
{
//value=formatter.format((数字)值);
getTableCellRenderComponent(表、值、isSelected、hasFocus、行、列);
setEnabled(table==null | | table.isEnabled());
如果(列==0)
设置水平对齐(右);
else if(列==1)
设置水平对齐(中心);
其他的
设置水平对齐(左);

对于(int i=0;i这可能是表的“视口”。您可以尝试使用:

yourTable.setFillsViewportHeight(true);

根据行高计算prefScrollableViewportSize,如

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

我试着把它放在:tablaMeasurements.setPreferredScrollableViewportSize(新维度(100100))之后;但什么也没发生。如果我评论这行,什么也没发生。你在哪里看到的?我只看到了首选宽度,但这与问题无关…仍然没有学会坚持java命名约定?坏习惯似乎以指数形式传播,所以重复我自己(尽管与这里的问题无关):Do.Not.Change.Caller的.State.In.Renderer的.getXXComponent.Never-ever…这意味着:真的真的从来没有。这里:列大小必须在其他地方进行。这也适用于行的颜色吗?谢谢你的建议反正没有“行颜色”这样的事情-设置的是渲染组件的颜色属性。当然,设置它是完全有效的,毕竟这是渲染器的工作:-)不允许从中设置表的任何属性renderer@mKorbel标题与视图视口大小有什么关系?显然没有;-)table.setPreferredScrollableViewportSize不接受(int,int)参数。我尝试将维度(int,int)用作参数使用您描述的参数,但什么都没有happens@Roman你说得对,该方法需要一个维度。对我有效的设置是:scrollPane中的表大小正好适合给定的行数。我尝试使用TablapRetraMiento.setPreferredScrollableViewportSize(新维度(100,5*TablapRetraMiento.getRowHeight());什么也没有。我甚至试图设置维(50,50)来查看表是否被截断,但也没有任何更改。也许我正在编写一些代码,这会导致此方法失败?@Roman不知道你做错了什么,我的水晶球是浑浊的;-)换句话说:编辑你的问题并显示一个小的(最多50行!)演示问题的独立(无自定义类)可运行示例。很有可能您自己会在过程中发现问题:-)