Java jtextarea 列间距_Java JTextArea动态列和行编号

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

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

这是我想要实现的一个例子,这是十六进制查看器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();

}

}

标签:jtextarea,java,string,swing,hex

来源: https://codeday.me/bug/20190722/1505455.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值