加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

如何显示带空格的选项卡?

发布时间:2020-12-15 04:37:00 所属栏目:Java 来源:网络整理
导读:我有一个 java程序,我从带有网格的JPanel上的文本文件中绘制每个字符(在它自己的框架中). 每个角色都在自己的框架中,但是当涉及到标签时,就会出现问题.我尝试用8个空格替换所有标签,但问题是(如上图所示)它出现不一致,因为标签并不总是8个字符长.有没有办法
我有一个 java程序,我从带有网格的JPanel上的文本文件中绘制每个字符(在它自己的框架中).

left- JPanel,right- text document


每个角色都在自己的框架中,但是当涉及到标签时,就会出现问题.我尝试用8个空格替换所有标签,但问题是(如上图所示)它出现不一致,因为标签并不总是8个字符长.有没有办法可以弄清楚标签使用了多少“空格”?或者关于如何获得与文本文件相同的布局的任何其他建议?

绘图文字的代码:

g2.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING,RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
Font font = new Font("monospaced",Font.PLAIN,18);
g2.setColor(Color.BLACK);
g2.setFont(font);
String lines[] = LabAgentComponent.PASTE.split("r?n");
for (int i=0; i<lines.length; i++) {
    for(int j=0; j<lines[i].length(); j++) {
        g2.drawString(Character.toString(lines[i].charAt(j)),j * gridSize,(i+1) * gridSize);
    }
}

解决方法

您可以在选项卡之前检查字符串的长度.

在Al203的情况下,那将是5.你的标签应该从8的下一个倍数开始,其间至少有1个空格.

这是一个可以帮助你的小班:

public class TabToSpaces
{
    public static void main(String[] args) {
        System.out.println(replaceTab("tb",8,"."));
        System.out.println(replaceTab("atb","."));
        System.out.println(replaceTab("abcdefgth","."));
        System.out.println(replaceTab("abcdefghti","."));
        System.out.println(replaceTab("atbtctdte","."));
        System.out.println(replaceTab("abtbtctdte","."));
    }

    private static String replaceTab(String string,int tabSize,String space) {
        Pattern pattern = Pattern.compile("t");
        Matcher matcher = pattern.matcher(string);
        StringBuffer sb = new StringBuffer();
        int offset = 0;
        while (matcher.find()) {
            int beforeLength = matcher.start() + offset;
            int spacesNeeded = (int) (Math.ceil((beforeLength + 1.0) / tabSize) * tabSize) - beforeLength;
            offset += spacesNeeded - 1;
            String spaces = new String(new char[spacesNeeded]).replace("",space);
            matcher.appendReplacement(sb,spaces);
        }
        matcher.appendTail(sb);
        return sb.toString();
    }
}

它输出:

........b
a.......b
abcdefg.h
abcdefgh........i
a.......b.......c.......d.......e
ab......b.......c.......d.......e

我使用圆点使空间更清晰.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读