Swing 如何在JTextArea中将文本居中对齐?

Swing 如何在JTextArea中将文本居中对齐?,swing,jtextarea,jtextpane,nimbus,Swing,Jtextarea,Jtextpane,Nimbus,我有文字环绕+文字居中+光环外观+背景色黑色的要求 我试用了以下两个组件 1。JTextPane -------支持:使用StyledDocument进行文本换行+文本居中 -------问题:自定义背景色不适用于Nimbus外观(无论是禁用还是启用) 这里显示的是哪个bug 我的jdk版本是:1.6.0\u 33 尝试的修复程序: UIManager.getLookAndFeelDefaults().put("TextPane.background", Color.RED); 但这也无法覆盖


我有文字环绕+文字居中+光环外观+背景色黑色的要求
我试用了以下两个组件
1。JTextPane
-------支持:使用StyledDocument进行文本换行+文本居中 -------问题:自定义背景色不适用于Nimbus外观(无论是禁用还是启用)
这里显示的是哪个bug

我的jdk版本是:1.6.0\u 33
尝试的修复程序:

UIManager.getLookAndFeelDefaults().put("TextPane.background", Color.RED);
但这也无法覆盖Nimbus默认值,即#d6d9df(214217223)

有人能帮我把文本放在JTextArea的中心吗? 提前谢谢

1。JTextArea
-------支持:文本换行+使用Nimbus LnF的背景着色(仅当其启用时)

-------问题:文本居中是这里的一个问题

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

最好使用JTextPane解决背景问题

当使用Nimbus LAF时,您似乎需要提供一个自定义的油漆器,以便只将背景漆成纯色。请通过@mKorbel查看此内容。您需要更改属性标记。此外,在Fillpainer中,我更改了:

g.setColor(color);
g.setColor(object.getBackground());
谢谢。。。。工作 这是我用过的

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());
    }
}
UIManager.getLookAndFeelDefaults().put(“TextPane[Enabled].backgroundPainter”,new FillPainter())`
公共类FillPainter实现Painter{
@凌驾
公共空白绘制(Graphics2D g、JComponent对象、整型宽度、整型高度){
g、 setColor(object.getBackground());
}
}

我使用它将文本居中放置在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());
}
publicstaticvoidcentertext(JTextArea-ta)
{
BuffereImage fake1=新的BuffereImage(1,1,BuffereImage.TYPE_INT_ARGB);
Graphics2D fake2=fake1.createGraphics();
FontMetrics fm=fake2.getFontMetrics(ta.getFont());
int lines=ta.getLineCount();
ArrayList=新建ArrayList();
尝试
{
对于(int i=0;i最长)
最长=fm.stringWidth(s);
}
用于(int n=0;n=最长)
继续;
while(fm.stringWidth(s)<最长)
s=''+s+'';
列表集(n,s);
}
StringBuilder sb=新的StringBuilder();
用于(字符串s:列表)
{
sb.append(前导).append(s.append('\n');
}
ta.setText(sb.toString());
}

使用填充的JTextArea作为参数调用CenterText可能会有帮助是的,但它仅适用于JTextPane,而不适用于JTextArea。我只需要解决JTextArea的问题(因为不能用Nimbus LnF在JTextPane中设置背景色)。到目前为止,还没有任何运气,:'(谢谢…工作,,,这是我使用的…
UIManager.getLookAndFeelDefaults().put(“TextPane[Enabled].backgroundPainter”,new FillPainter());


公共类FillPainter实现Painter{@Override public void paint(Graphics2D g,JComponent对象,int-width,int-height){g.setColor(object.getBackground();}}}