Java JTextArea动态列和行编号

我有一个快速的谷歌,我似乎无法找到一个很好的解决方案,主要是因为我不知道如何描述它。

本质上,我需要在JTextArea显示任意数量的hex字符,并且我希望它们间隔均匀,并且字符的顶部和左侧显示字符的位置。

这是我想要实现的一个例子,这是hex查看器WinHex。

在此处输入图像描述

我一直在玩转换一个字节数组到一个字符串,然后文本包装它,但我有一些奇怪的结果。 任何关于如何实现类似的东西的建议都将受到赞赏。

我考虑的另一个选择是使用JTable,但我想知道这是否会使问题稍微复杂化。 也许。

谢谢

这应该让你开始,使用AbstractTableModel一个非常简单的实现。 这只花了我15分钟的时间来写(响应“过度复杂的问题”)。

 import java.awt.BorderLayout; import java.awt.EventQueue; import java.util.ArrayList; import java.util.List; import java.util.Random; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JTable; import javax.swing.table.AbstractTableModel; public class HexText extends JFrame { public static void main(String... args) { final HexText window = new HexText(); EventQueue.invokeLater(new Runnable() { @Override public void run() { window.setVisible(true); } }); } private static class HexTableModel extends AbstractTableModel { List data = new ArrayList<>(); @Override public int getRowCount() { return data.size(); } @Override public int getColumnCount() { return 9; } @Override public Object getValueAt(int rowIndex, int columnIndex) { if (columnIndex == 0) { return Integer.toHexString(rowIndex << 5); } else { int row = data.get(rowIndex); int theByte = 0xFF & (row >> (columnIndex * 2)); String output = Integer.toHexString(theByte); if (output.length() == 1) output = "0" + output; return output; } } public void addRow(int rowElement) { data.add(rowElement); fireTableRowsInserted(data.size() - 1, data.size() - 1); } } public HexText() { JPanel contentPane = new JPanel(new BorderLayout()); HexTableModel theModel = new HexTableModel(); JTable theTable = new JTable(theModel); Random r = new Random(); for (int i = 0; i < 20; i++) { theModel.addRow(r.nextInt()); } contentPane.add(theTable, BorderLayout.CENTER); this.add(theTable); this.setDefaultCloseOperation(EXIT_ON_CLOSE); this.pack(); } } 

截图

我考虑过使用JTable,但我想知道这是否会使问题变得复杂

十年前,当我试图理解JTable时,我创建了一个简单的hex编辑器,试图理解表格模型,渲染器和编辑器。

查看Hex Editor以获取我的结果。 只需解压缩文件并编译所有java文件,然后执行Hex类。

我没有看过10年的代码所以我不知道我是否遵循了所有最好的编码实践,但无论如何都要玩得开心。

Hex Viewer