gpt4 book ai didi

java - 在 JTable 中删除图像之间的空间

转载 作者:行者123 更新时间:2023-12-01 16:34:58 25 4
gpt4 key购买 nike

在下图中,您可以看到一个包含两列的 JTable

更新
** 列被隐藏。所选行后面的红色是
背景颜色红色仅用于演示目的
。 **

每行有两张图片。

第一张图片是一个看起来像复选框的 png 图像。随后
写有 friend 名字的 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);

}

这里是 DefaultTableCellRenderer

case 0:// type

if(friend.selected){
image = new ImageIcon(getClass().getResource
("/resources/friendlist/checkbox_checked.png")).getImage();
this.setIcon( new ImageIcon(image));
}else{
image = new ImageIcon(getClass().getResource("/resources
/friendlist/checkbox_unchecked.png")).getImage();
this.setIcon( new ImageIcon(image));
}

break;
case 1:// files

BufferedImage old = null;
try {

if(friend.deviceType.equals(Consts.DEVICE_TYPE_DEVICE))
old = ImageIO.read(getClass().getResource
("/resources/friendlist/row_with_device.png"));
else
old = ImageIO.read(getClass().getResource
("/resources/friendlist/row_with_pc.png"));

} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

int w = old.getWidth();
int h = old.getHeight();
BufferedImage img = new BufferedImage(w, h, BufferedImage.TYPE_INT_ARGB);

Graphics2D g2d = img.createGraphics();
g2d.drawImage(old, 0, 0, null);
g2d.setPaint(Color.WHITE);
//g2d.setFont(new Font("Serif", Font.BOLD, 20));

String s = friend.name;
FontMetrics fm = g2d.getFontMetrics();
int x = 10 ;
int y = 20;
g2d.drawString(s, x, y);
g2d.dispose();


this.setIcon( new ImageIcon(img));
break;
}

enter image description here

最佳答案

也许您可以只使用带有自定义渲染器的 JList。然后,渲染器将采用简单的友元对象并使用简单的 JPanel 和 GridLayout 构建适当的标签。

关于java - 在 JTable 中删除图像之间的空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10164466/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com