我的ASCII艺术在JLabel上是错误的

时间:2014-05-14 16:52:35

标签: java swing ascii-art

我试图用ASCII艺术创建一个->箭头,但我的JLabel没有合作。它给了它这个外观:

bad ->

使它看起来像_>或者其他的东西。我该如何解决?

SSCCE:

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.WindowConstants;

public class Test {
    public static void main(String[] args) {
        JFrame j = new JFrame("TEST");
        j.add(new JLabel(" -> "));
        j.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
        j.pack();
        j.setSize(j.getWidth() * 3, j.getHeight() * 3);
        j.setLocationRelativeTo(null);
        j.setVisible(true);
    }
}

3 个答案:

答案 0 :(得分:3)

-相对于>的位置取决于字体。您必须找到另一种方法来执行此操作,或使用字体,其中展示位置是您喜欢的方式。

等宽字体倾向于-放在>旁边,但不能保证。例如,就现在SO而言,->看起来大致错误对齐 - > (对我而言)。

更好的答案,Russell Zahniser在评论中(如果他将其作为答案发布,我将删除此内容),就是使用其中一个(许多)Unicode箭头,例如\u2192。这是一个有用的列表here on the unicode.org site

答案 1 :(得分:1)

正如其他人所指出的,你必须使用" Monospaced"字体,至少。虽然这不必然意味着-垂直对齐方式与>匹配,但对于标准字体应该如此。在任何情况下,属于"等宽的"将确保所有字符的 width 相等,这对于ASCII艺术至关重要。

import java.awt.Font;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.WindowConstants;

public class Test
{
    public static void main(String[] args)
    {
        JFrame j = new JFrame("TEST");

        JLabel label = new JLabel(" -> ");
        label.setFont(new Font("Monospaced", Font.PLAIN, 12));

        j.add(label);
        j.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
        j.pack();
        j.setSize(j.getWidth() * 3, j.getHeight() * 3);
        j.setLocationRelativeTo(null);
        j.setVisible(true);
    }
}

答案 2 :(得分:0)

之间的区别
->

  

- >

是字体吗?如果这是ASCII艺术,你应该通过setFont为你的JLabel使用等宽字体(Consolas,Courier New,Monaco ......)。类似的东西:

JFrame j = new JFrame("TEST");
JLabel label = new JLabel(" -> ");
label.setFont(new Font("Courier New", Font.PLAIN, 12)));
j.add(label);
...