2


我需要文本环绕 + 文本居中 + Nimbus 外观 + 背景颜色为黑色。
我尝试了以下 2 个组件
1. JTextPane
-------支持:Text Wrapping + Text Centering using StyledDocument
-------问题:自定义背景颜色不起作用 Nimbus Look and Feel(be it禁用或启用)
这是这里显示的错误http://bugs.sun.com/bugdatabase/view_bug.do;jsessionid=ab1938d61a7fd83ca2b54eb8df7?bug_id=6789980

我的 jdk 版本是:1.6.0_33 已
尝试修复:

UIManager.getLookAndFeelDefaults().put("TextPane.background", Color.RED);

但这也无法覆盖 Nimbus 默认值 #d6d9df (214,217,223)

任何人都可以帮助我在 JTextArea 中进行文本居中吗?提前致谢

1. JTextArea
-------支持:文本换行 + 使用 Nimbus LnF 的背景着色(仅在启用时)
-------问题:此处的文本居中是一个问题

4

3 回答 3

2

要使文本居中,您应该使用 JTextPane 而不是 JTextArea。居中文本是一个大问题。

最好用 JTextPane 解决后台问题。

使用 Nimbus LAF 时,您似乎需要提供自定义 Painter 才能将背景绘制为纯色。查看@mKorbel 的这个答案。您需要更改属性标签。同样在 FillPainter 我改变了:

g.setColor(color);
g.setColor(object.getBackground());
于 2013-06-18T15:58:55.260 回答
1

谢谢....工作,,,,这就是我用的...

UIManager.getLookAndFeelDefaults().put("TextPane[Enabled].backgroundPainter", new FillPainter());`


public class FillPainter implements Painter<JComponent> {
    @Override
    public void paint(Graphics2D g, JComponent object, int width,int height) {
        g.setColor(object.getBackground());
    }
}
于 2013-06-19T10:52:12.257 回答
0

我用它来使 JTextArea 中的文本居中

public static void centerText (JTextArea ta)
{
    BufferedImage fake1 = new BufferedImage(1, 1, BufferedImage.TYPE_INT_ARGB);
    Graphics2D fake2 = fake1.createGraphics();
    FontMetrics fm = fake2.getFontMetrics(ta.getFont());

    int lines = ta.getLineCount();
    ArrayList<String> list = new ArrayList<>();
    try
    {
        for (int i = 0; i < lines; i++)
        {
            int start = ta.getLineStartOffset(i);
            int end = ta.getLineEndOffset(i);

            String line = ta.getText(start, end - start).replace("\n","");
            list.add (line.trim());
        }
    }
    catch (BadLocationException e)
    {
        System.out.println(e);
    }
    alignLines (list, fm, ta);
}

private static void alignLines (ArrayList<String> list, FontMetrics fm, JTextArea ta)
{
    String leading = "      ";
    int longest = -1;
    for (String s : list)
    {
        if (fm.stringWidth(s) > longest)
            longest = fm.stringWidth(s);
    }
    for (int n=0; n<list.size(); n++)
    {
        String s = list.get(n);
        if (fm.stringWidth(s) >= longest)
            continue;
        while (fm.stringWidth(s) < longest)
            s = ' '+s+' ';
        list.set(n, s);
    }
    StringBuilder sb = new StringBuilder();
    for (String s : list)
    {
        sb.append(leading).append(s).append('\n');
    }
    ta.setText (sb.toString());
}

使用填充的 JTextArea 作为参数调用 CenterText

于 2018-03-03T06:16:14.760 回答