JTable 单元格中的图像相差一个像素?

2024-03-26

因此,我现在可以将图像加载到 JTable 的单元格中,但由于某种原因,图形全部向右移动了一个像素,使我能够看到 JTable 的背景。有任何想法吗?抱歉,如果我的格式已关闭;仍然没有完全习惯这种标记。

public static void main(String[] args) {  

  final int rows = 16;  
  final int columns = 16;  
  final int dimTile = 32;

  JFrame frame = new JFrame("test");  
  JTable table = new JTable(rows, columns);  
  table.setIntercellSpacing(new Dimension(0, 0));  
  table.setShowGrid(false);
  table.setBackground(Color.cyan);  
  table.setTableHeader(null);  
  table.setRowHeight(dimTile);  
  table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);  
  table.setPreferredSize(new Dimension(rows * dimTile, columns * dimTile));  

  Tile tile = new Tile(0);  
  for(int i = 0; i < rows; i++) {  
     for(int j = 0; j < columns; j++) {  
        table.getColumnModel().getColumn(j).setCellRenderer(new MyRenderer());  
        table.setValueAy(tile, i, j);  
     }  
  }  

  JScrollPane scrollPane = new JScrollPane(table, ScrollPaneConstants.VERTICAL_SCROLLBAR_NEVER, ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);  
scrollPane.setBorder(BorderFactory.createEmptyBorder());  

  frame.getContentPane().add(scrollPane);  
  frame.setSize(512, 512);  
  frame.setVisible(true);  
  int adjustedSizeX = frame.getInsets().left + frame.getInsets().right + 512;  
  int adjustedSizeY = frame.getInsets().top + frame.getInsets().bottom + 512;  
  frame.setSize(adjustedSizeX, adjustedSizeY);  
  frame.pack();  

  ...  
}  


public class MyRenderer extends DefaultTableCellRenderer {  
  @Override  
  public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {  
     super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);  

      Tile tile = (Tile) value;  
      setIcon(tile.getIcon());  
      return this;  
   }  
}  


public class Tile {  
  ImageIcon icon;  

  public Tile(int graphic) {  
     icon = new ImageIcon(PATH/TO/"...test.png");  
  }  

  public ImageIcon getIcon() {  
     return icon;  
  }  
}  

不完全确定“关闭一个像素”是什么意思 - 但要在没有任何视觉伪像的情况下实现零单元格间距,您必须将边距归零并关闭网格线:

table.setIntercellSpacing(new Dimension(0, 0)); 
table.setShowGrid(false)

Edit

好吧,仔细看看,你的代码有几个问题

  • 您间接而不是直接调整列大小(还有另一个很好的例子,为什么永远不要执行 component.setPreferredSize :-)
  • 渲染器的边框需要一定的大小

要修复第一个,请配置每个column的宽度,表格布局会自动配置它自己

    final int rows = 16;
    final int columns = 16;
    Tile tile = new Tile(0);
    int tileHeight = tile.getIcon().getIconHeight();
    int tileWidth = tile.getIcon().getIconWidth();

    JTable table = new JTable(rows, columns);
    // remove all margin
    table.setIntercellSpacing(new Dimension(0, 0));
    table.setShowGrid(false);
    table.setTableHeader(null);
    // set the rowHeight
    table.setRowHeight(tileHeight);
    // turn off auto-resize
    table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
    // configure each column with renderer and prefWidth
    for (int j = 0; j < columns; j++) {
        TableColumn column = table.getColumnModel().getColumn(j);
        column.setCellRenderer(new MyRenderer());
        column.setPreferredWidth(tileWidth);
    }

对于第二个,将每次调用中的边框清空:

public static class MyRenderer extends DefaultTableCellRenderer {
    @Override
    public Component getTableCellRendererComponent(JTable table,
            Object value, boolean isSelected, boolean hasFocus, int row,
            int column) {
        super.getTableCellRendererComponent(table, value, isSelected,
                hasFocus, row, column);
        setBorder(null);
        Tile tile = (Tile) value;
        setIcon(tile.getIcon());
        return this;
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JTable 单元格中的图像相差一个像素? 的相关文章

  • 从文本字段输入中过滤 JList

    我有一个粘在 JList 上的文本字段 我需要根据用户在文本字段中输入的值来过滤 JList 实体 例如 如果 JList 值为 one two three 和用户类型 three 在文本字段中 JList 应选择带有 three valu
  • 如何控制 JTable 中的字体样式、颜色和大小?

    我有一个JTable在 Java Swing 中 我需要设置字体大小 颜色和样式 我怎样才能实现它JTable 为什么要在基本设置中设置TableRendererJTable http download oracle com javase
  • javafx tableview 中的快速过滤

    我需要在 javafx tableview 中实现一个具有大量数据 大约 100 000 的过滤器 我努力了本教程 http code makery ch blog javafx 2 tableview filter 它可以工作 但是与 s
  • 使用 ChangeListener 触发 Java Swing 中的更改?

    我正在实现一个猜词游戏 所附图片让我了解了我正在做的事情 我的GamePane由两个部分组成 ControlPane and HangManPane 这是所附图像的顶部和底部部分 当玩家点击时 New Game按钮 GamePane必须通知
  • 如何格式化 LocalTime 变量

    我对 Java windowbuilder 很陌生 这是我第一个项目的一部分 String starttime JOptionPane showInputDialog null What time would you like to sta
  • 如何在 JPasswordField 中启用剪切、复制?

    我注意到我无法剪切和复制JPasswordField 现在如何将密码的选定部分复制 剪切到剪贴板 有什么方法可以做到这一点吗 简单 用这个方法 JPasswordField jt new JPasswordField 20 Put clie
  • Java中右键复制粘贴

    我正在使用 Netbeans 开发将在 Windows 中使用的应用程序 我注意到我无法右键单击进行复制或粘贴 我怎样才能启用此功能 我正在使用基本的 Swing 控件 例如 JText 和 JTextArea 为什么右键单击在java应用
  • Windows 7 触摸屏 + Java Swing = 延迟鼠标事件

    我正在用 Java 开发一个 Swing 应用程序 该程序将在专用的 Windows 7 触摸屏机器上运行 据我所知 该程序应该是在正常操作下唯一在其上运行的程序 我注意到 Windows 7 的触摸屏界面有一个可以阻止 mousedown
  • Java swing:为 JComboBox 实现我的 Combobox 模型

    我需要我的组合框包含组织的简称 问题是我can在下拉列表中查看组织名称 但是cant实际上选择它 我的错误在哪里 public class ToComboBoxModel extends AbstractListModel implemen
  • JTextPane 缩进

    有没有办法缩进文本块JTextPane import javax swing import java awt import javax swing text StyledDocument public class SimpleTextPan
  • Java CreateProcess 错误=193,%1 不是有效的 Win32 应用程序

    我正在尝试读取和写入可扩展链接格式 ELF 下面是我收到错误的行 p r exec optimizer sourceFile sourceFile a all i 运行此行后 我收到如下错误 java io IOException Cann
  • Java 控制台 JPanel

    你好 是否可以在 JPanel 中绘制 java 控制台返回的内容 你有教程可以遵循吗 谢谢 SW 我不记得在哪里找到这个 但我已使用我称为 TextAreaOutputStream 的类将输出流输出到 JPanel 中保存的 JTextA
  • 背景图像隐藏其他组件,例如按钮标签等,反之亦然

    如何解决此代码中组件的隐藏问题 代码运行没有错误 但背景图片不显示 如何更改代码以获取背景图像 使用验证方法时 它在validation 中创建错误 public class TEST public TEST String strm Jan
  • 调整添加的绘制组件的大小和奇怪的摆动行为

    这个问题困扰了我好几天 我正在制作一个特殊的绘画程序 我制作了一个 JPanel 并添加了使用 Paint 方法绘制的自定义 jComponent 问题是 每当我调整窗口大小时 所有添加的组件都会 消失 或者只是不绘制 因此我最终会得到一个
  • 为什么我的项目没有显示在 JFrame 中?

    我对 JFrame 相当陌生 我想知道为什么我的项目没有显示在窗口上 我知道我没有 ActionHandler 但我只想让我的文本字段显示在我的窗口上 这是我的代码 import java awt Font import javax swi
  • 有没有办法更改 JDialog 的所有者?

    我有一个非常具体的问题 我想知道是否有办法更改 JDialog 的所有者 可以使用构造函数设置 我想不存在 官方 的可能性 除了黑客攻击 但我想确保我没有错过任何东西 关于该主题的任何想法或提示都会有所帮助 谢谢 如果您的问题是如何在应用程
  • 获取对 JOptionPane 静态方法创建的对象的引用

    我想知道是否可以获取对由 JOptionPane 的静态方法之一 例如 showMessageDialog 创建的 JDialog 对象的引用 我打算修改对话框在屏幕上出现的位置 更具体地说 我希望对话框默认显示在主应用程序窗口的左上角 而
  • Jsplitpane 自动调整大小

    我有一个 JSPlitPane 它们之间有 50 的分隔线 这工作正常 但是 当我在右侧添加一些 JLabels 时 jsplitpane 会忽略我的 50 分隔符 左侧窗格会增加其大小 并会挤压右侧窗格 为什么会发生这种情况以及如何解决
  • 向 Scala Swing Panel 添加标签时出现类型不匹配错误

    我有这个课程扩展FlowPanel我正在尝试向其中添加标签 import java awt Label Color import scala swing import scala util Random class MyPanel exte
  • 使用 AbstractTableModel 获取 JTable 中选定的行

    我有一个JTable using AbstractTableModel我在哪里有一个JCheckBox在第一列中用于选择行 现在 我需要从已检查的表中获取选定的行 现在 我按顺序从第一行遍历到最后一行并获取所有选择的行 如下所示 List

随机推荐

  • 增加tomcat 7中的并发连接数

    想知道如何增加tomcat 7中的并发连接数 我做了一些研究 从apache文档中发现 设置acceptCount maxConnections的值并增加maxThreads可以做到这一点 但是当尝试时 我只能提交500个请求1000 下面
  • 多字段匹配查询

    我对弹性搜索相当陌生 想编写一个涉及两个字段的查询 我的意思是字段的内容包含指定的子字符串 我有一个包含字段的文档 如下所示 name n tag t 我试过这个 search d query match name n tag t 但查询结
  • androidx.legacy:legacy-support-v4: 依赖有什么用

    我正在实现 Android Room 数据库 在其中一篇教程中我发现了使用androidx legacy legacy support v4 1 0 0依赖性 谁能告诉我这种依赖关系的用途 androidx legacy legacy su
  • Linux 上的 PHP 和 RAW Sockets

    做一个就足够了 sudo setcap cap net raw eip usr bin php5 能够在 Linux 中的 PHP 而不是 CLI 中使用 RAW SOCKETS 吗 如果是 那么它不起作用 但开始在 CLI 中工作但不使用
  • 如何在 C# 中解析 HTTP url?

    我的要求是解析 Http URL 并相应地调用函数 在我当前的实现中 我使用嵌套的 if else 语句 我认为这不是一种优化的方式 您能建议其他一些有效的方法吗 网址是这样的 server func1 server func1 SubFu
  • 使用服务主体对 GetReportInGroupAsync PowerBI Embedded API 调用进行未经授权的响应

    我正在尝试将 Power BI 报告嵌入到我的 Net Core 应用程序中 但是我无法从请求中获得有效的响应 我正在使用 Microsoft PowerBI API 包和通过服务主体注册的 azure 应用程序 据我所知 我已按照此处的说
  • 在没有包装器的情况下在 QT 上使用 OpenGL [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在寻找一个与 OpenGL 结合使用的 GUI 工具包 QT 看起来很有前途 但不幸的是它将大多数
  • 在 Angular 中旋转伪 3D 轮播

    我正在尝试创建一个伪 3d 轮播 其中包含 5 个项目 如下所示 并让它们循环 我发现这很棒堆栈闪电战 https stackblitz com edit angular ivy sqt1uq file src 2Fapp 2Fapp co
  • 一般替换 Angular 2 路由参数并导航

    我正在构建一个 Angular 应用程序 其中大多数路由都属于给定项目并包含一个projectId 顶部导航区域将有一个项目的下拉列表 当用户从下拉列表中选择一个项目时 它需要导航到当前路线 但将 projectId 替换为新值 这非常类似
  • NameError:未定义全局名称“numpy”

    我正在尝试通过收集 essentia 一个 MIR 库 函数来编写一个特征提取器 流程图如下 单独的特征提取 池化 PoolAggregator 使用poolAggregator连接形成整个特征列表np concatenate 即使不导入
  • 如果屏幕上显示多个二维码,请扫描二维码

    我正在开发一个Android示例应用程序作为一个学术项目 我需要扫描二维码 我使用了二维码扫描库 如果屏幕上只有一个二维码 我能够成功检测到二维码 是的 我想扫描二维码 尽管相同的二维码一次显示在屏幕上的多个位置 例如 在我的笔记本电脑屏幕
  • Nginx:何时使用 proxy_set_header 主机 $host 与 $proxy_host

    我一直在阅读反向代理 想知道什么时候proxy set header Host host是适当的proxy set header Host proxy host 我做了一些研究本文 https www digitalocean com co
  • 在强制布局上拖动会阻止其他 mouseup 侦听器

    我想在 d3 js 强制布局中启用拖动 当拖动一个圆圈并释放鼠标按钮时 我想通过回调调用特定的函数 如下所示 this force d3 layout force nodes this nodes size this width this
  • Netty websocket客户端闲置5分钟后不从服务器读取新帧

    我在服务器端和客户端都使用 Netty 来建立和控制 websocket 连接 我在服务器端有一个空闲状态处理程序 http netty io 4 1 api io netty handler timeout IdleStateHandle
  • 在jsp页面中显示jfreechart

    我想显示一个jfreechartjsp 页面中的图表 我写的代码如下 img src chart jpg 哪里的createCategoryChart 方法创建所需的 jpg 它存储在 eclipse 文件夹中 我没有在文件名中添加任何路径
  • 强制 UIView/UIVIewController 方向

    我们正在编写一个专门处于横向模式的应用程序 我们对根视图使用变换将其旋转到 LandscapeRight 然后该视图加载的每个视图都共享坐标系 这一切都很好 除了我们的视图之一有一个由视图控制器加载的 UIWebView 对象 我们尝试查看
  • 如何将shadershop公式转换成glsl

    我最近一直在学习着色器的一些基础知识 并且想出了一个很棒的视觉工具 着色器商店 http www cdglabs org Shadershop 但我无法将我在此站点中创建的公式转换为 glsl 一个简单的例子 我在此网站中创建了一个公式 我
  • data.table 相当于 tidyr 中的complete/fill

    我有以下数据 library tidyr library dplyr gt gt Attaching package dplyr gt The following objects are masked from package stats
  • Android-状态栏通知

    我是安卓新手 我现在想知道如何在主页中创建状态通知栏 谁能帮我一些代码 提前致谢 notificationManager NotificationManager context getSystemService Context NOTIFI
  • JTable 单元格中的图像相差一个像素?

    因此 我现在可以将图像加载到 JTable 的单元格中 但由于某种原因 图形全部向右移动了一个像素 使我能够看到 JTable 的背景 有任何想法吗 抱歉 如果我的格式已关闭 仍然没有完全习惯这种标记 public static void