2013-06-18 2 views
2


У меня есть требование обтекания текста + центрирование текста + просмотр изображения Nimbus и Feel + с фоном черного цвета.
Я попытался с 2 следующих компонентов
1. JTextPane
------- поддерживает: Текст Обертывание + Текст Центрирование с помощью StyledDocument
------- вопрос: пользовательские цвет фона не работает Nimbus Look и Feel (будь то выключен или включен)
что ошибка, как показано здесь http://bugs.sun.com/bugdatabase/view_bug.do;jsessionid=ab1938d61a7fd83ca2b54eb8df7?bug_id=6789980Как центрировать выравнивание текста в JTextArea?

моя JDK версии: 1.6.0_33
затруднительных пытался:

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

, но это также не может переопределить значение по умолчанию Nimbus, который # d6d9df (214.217.223)

Может кто-нибудь помочь мне с текстом центрирования в JTextArea? Заранее спасибо

1. JTextArea
------- поддерживает: Текст Обертывание + фон окраски с Nimbus ЛНФ (только тогда, когда его включен)
------- выпуск: здесь есть текстовое центрирование

+0

http://stackoverflow.com/questions/3213045/centering-text- in-a-jtextarea-or-jtextpane-horizontal-text-alignment может помочь – Mogli

+0

да, но работает только с JTextPane, а не с JTextArea. Мне нужно решить мою проблему только с помощью JTextArea (потому что цвет фона не может быть установлен в JTextPane с Nimbus LnF). На этот раз не повезло: «( –

ответ

2

В центре текста вы должны использовать JTextPane, а не JTextArea. Центрирование текста - большая проблема.

Лучше решить проблему фона с помощью JTextPane.

При использовании Nimbus LAF, похоже, вам нужно предоставить пользовательский Painter, чтобы просто нарисовать фон как сплошной цвет. Проверьте это answer от @mKorbel. Вам нужно будет изменить тег свойства. Кроме того, в FillPainter я изменил:

g.setColor(color); 
g.setColor(object.getBackground()); 
+0

Спасибо .... Working ,,,, Это то, что я использовал ... ' UIManager.getLookAndFeelDefaults(). Put ("TextPane [ Включено].backgroundPainter», новый FillPainter());'

'общественного класс FillPainter реализует Живописец { \t \t @Override общественной недействительной краска (Graphics2D г, JComponent объект, ширина INT, INT высоту) { \t \t г .setColor (object.getBackground()); \t} } ' –

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()); 
    } 
} 
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()); 
} 

вызов CenterText с заполненным JTextArea в качестве аргумента

Смежные вопросы