Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/361.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 使用setBorder对DefaultTableCellRenderer没有任何影响_Java_Grid_Jtable_Renderer - Fatal编程技术网

Java 使用setBorder对DefaultTableCellRenderer没有任何影响

Java 使用setBorder对DefaultTableCellRenderer没有任何影响,java,grid,jtable,renderer,Java,Grid,Jtable,Renderer,我发现的一些示例被修改为尝试使用setboorder向单元格添加填充。 实际上,尝试实现与setIntercellSpacing相同的行为,但改用BorderFactory类。 根据以下代码,对单元格填充似乎没有任何影响。 我错过了哪一步 import java.awt.BorderLayout; import java.awt.Color; import java.awt.Component; import javax.swing.BorderFactory; import javax.swi

我发现的一些示例被修改为尝试使用setboorder向单元格添加填充。 实际上,尝试实现与setIntercellSpacing相同的行为,但改用BorderFactory类。 根据以下代码,对单元格填充似乎没有任何影响。 我错过了哪一步

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
import javax.swing.BorderFactory;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JComponent;
import javax.swing.JTextField;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableCellRenderer;
import javax.swing.table.DefaultTableCellRenderer;

public class EvenOddRowCellRenderer extends JFrame {
  DefaultTableModel tmodel = new DefaultTableModel(new Object[][] { { "some", "text" },
      { "any", "text" }, { "even", "more" }, { "text", "strings" }, { "and", "other" },
      { "text", "values" } }, new Object[] { "Column 1", "Column 2" });


  public EvenOddRowCellRenderer() {
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    JTable table = new JTable(tmodel);

    table.setDefaultRenderer(Object.class, new MyRenderer());
    getContentPane().add(new JScrollPane(table), BorderLayout.CENTER);

    pack();
  }

  public static void main(String arg[]) {
    new EvenOddRowCellRenderer().setVisible(true);
  }
}

class MyRenderer extends DefaultTableCellRenderer {
   public MyRenderer ()
   { 
       super();
       setBorder(BorderFactory.createEmptyBorder(15, 15, 15, 15));
   }

  public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected,
      boolean hasFocus, int row, int column) {
    JTextField editor = new JTextField();
    if (value != null)
      editor.setText(value.toString());
    editor.setBackground((row % 2 == 0) ? Color.white : Color.cyan);
    return editor;
  }
}           

默认渲染器是JLabel。您正在设置渲染器上的边框,这是正常的

问题是您创建了第二个组件,即文本字段,并返回JTextField作为渲染器组件。您没有将边框添加到文本字段。摆脱JTextField

用这个就可以了;将标签作为渲染器返回