Java 在JTable中,删除图像之间的空格
在下图中,您可以看到一个带有两列的Java 在JTable中,删除图像之间的空格,java,swing,jtable,graphics2d,tablecellrenderer,Java,Swing,Jtable,Graphics2d,Tablecellrenderer,在下图中,您可以看到一个带有两列的JTable 更新 **这些列是隐藏的。所选行后面的红色为 背景色红色仅用于演示** 每行有两张图片 第一张图片是一个png图像,看起来像一个复选框。然后是 将朋友的姓名写入的png图像 图像应该看起来像一个图像,但有一个空间 是否可以删除此空间? 图像没有空间 也许使用JTable 在这种情况下,其他swing“列表”可以做到这一点 创建表的代码 jTableSpriidFriends = new JTable(); jTabl
JTable
更新**这些列是隐藏的。所选行后面的红色为
背景色红色仅用于演示** 每行有两张图片 第一张图片是一个png图像,看起来像一个复选框。然后是
将朋友的姓名写入的png图像 图像应该看起来像一个图像,但有一个空间 是否可以删除此空间?
图像没有空间 也许使用
JTable
在这种情况下,其他swing“列表”可以做到这一点 创建表的代码
jTableSpriidFriends = new JTable();
jTableSpriidFriends.setRowMargin(0);
jTableSpriidFriends.setIntercellSpacing(new Dimension(0, 0));
jTableSpriidFriends.setShowHorizontalLines(false);
jTableSpriidFriends.setShowVerticalLines(false);
jTableSpriidFriends.setShowGrid(false);
m_adapterSpriidFriends = new AbstractTableModelJTableSpriidFriends();
rendererSpriidFriends = new CellRendererJtableSpriidFriends();
jTableSpriidFriends.setModel(m_adapterSpriidFriends);
jTableSpriidFriends.setDefaultRenderer(ImageIcon.class,
rendererSpriidFriends );
jTableSpriidFriends.setRowSelectionAllowed(true);
jTableSpriidFriends.addMouseListener(this);
jTableSpriidFriends.getSelectionModel().addListSelectionListener(this);
jTableSpriidFriends.setTableHeader(null);
scrollPaneSpriidFriends = new JScrollPane();
scrollPaneSpriidFriends.setBounds(11, 55, 176, 264);
panelSpriid.add(scrollPaneSpriidFriends);
scrollPaneSpriidFriends.setViewportView(jTableSpriidFriends);
for (int i=0; i<m_adapterSpriidFriends.getColumnCount(); i++) {
TableColumn column = jTableSpriidFriends.getColumnModel().getColumn(i);
if (i==0) column.setPreferredWidth(50);
if (i==1) column.setPreferredWidth(120);
}
默认单元格渲染器扩展了JLabel,并将自身用作显示单元格的组件。 JLabel具有图标和文本,两者之间有间隙。也许这就是原因:
table.setDefaultRenderer(Object.class, new DefaultTableCellRenderer() {
@Override
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
Component comp = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
if (comp instanceof JLabel) {
JLabel label = (JLabel)comp;
label.setIconTextGap(0);
}
return comp;
}
});
或者:
默认单元渲染器扩展了JLabel,并将自身用作显示单元的组件。 JLabel具有图标和文本,两者之间有间隙。也许这就是原因:
table.setDefaultRenderer(Object.class, new DefaultTableCellRenderer() {
@Override
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
Component comp = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
if (comp instanceof JLabel) {
JLabel label = (JLabel)comp;
label.setIconTextGap(0);
}
return comp;
}
});
或者:
也许您可以使用带有自定义渲染器的JList。然后,渲染器将获取Sprid friend对象,并使用简单的JPanel和GridLayout构造适当的标签。也许您可以将JList与自定义渲染器一起使用。然后,渲染器将获取spriid friend对象,并使用简单的JPanel和GridLayout构造适当的标签。您是否尝试过
myTable.setShowVerticalLines(false)代码>?另请查看JTable.setIntercellSpacing(维度intercellSpacing)
。setShowVerticalline已设置为false,但我忘记了setIntercellSpacing。设置setIntercellSpacing(新尺寸(0,0))。。。。没有任何区别。为了更快地获得更好的帮助,请使用图标编辑您的问题,您只需使用UIManager.getIcon(“OptionPane.questionIcon”)
@mKorbel我不知道您谈论的关于“OptionPane.questionIcon”的内容。您能澄清一下吗?由于@mkorbel添加SSCE您是否尝试过myTable.setShowVerticalLines(false)代码>?另请查看JTable.setIntercellSpacing(维度intercellSpacing)
。setShowVerticalline已设置为false,但我忘记了setIntercellSpacing。设置setIntercellSpacing(新尺寸(0,0))。。。。没有任何区别。为了更快地获得更好的帮助,请使用图标编辑您的问题,您只需使用UIManager.getIcon(“OptionPane.questionIcon”)
@mKorbel我不知道您谈论的关于“OptionPane.questionIcon”的内容。您能澄清一下吗?通过@mKorbelinteresting添加SSCE将测试一些..AbstractTableModel中的getColumnClass()正在返回ImageIcon.classe我可以从GetTableCellRenderComponent返回其他内容吗?如何返回?该方法以.setText(“”)结尾。。。很好地认识到,一个单一组件可被多个单元重用;因此,每次都会再次设置文本和颜色等属性。您也应该这样做,但组件是不相关的。对于我的答案中的代码,我将给出一个替代方案。有趣的是,我将测试一些..AbstractTableModel中的getColumnClass()正在返回ImageIcon.classe我是否可以从GetTableCellRenderer组件返回其他内容,以及如何返回?该方法以.setText(“”)结尾。。。很好地认识到,一个单一组件可被多个单元重用;因此,每次都会再次设置文本和颜色等属性。您也应该这样做,但组件是不相关的。对于我的答案中的代码,我将给出一个替代方案。从技术上讲,没有。但是您可以使它看起来像渲染器中的两列。使用JList很好。完全删除检查图像,并使用两个大图像,一个带检查,一个不带检查。从技术上讲,没有。但您可以使其看起来像渲染器中的两列。使用JList效果很好。全部删除检查图像,并使用两个大图像,一个带有检查,一个没有。
table.setDefaultRenderer(ImageIcon.class, new DefaultTableCellRenderer() {
{
setIconTextGap(0);
}
});