我发现的一些样本被修改为尝试使用setBorder向单元格添加填充。
本质上尝试完成与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;
}
}
答案 0 :(得分:0)
默认渲染器是JLabel。您正在渲染器上设置边框,这没关系。
问题是您创建了第二个组件(文本字段),并且您将JTextField作为渲染器组件返回。您没有将边框添加到文本字段。摆脱JTextField。
只需使用return this;
将标签作为渲染器返回。