Java Swing: вопрос столбцов JTextArea - PullRequest
2 голосов
/ 06 июня 2010

Как поместить текст в определенные столбцы с помощью jTextArea?

        private javax.swing.JTextArea jTextArea1;
        jTextArea1.setColumns(4);
        jTextArea1.insert(price, 0);    //column 1
        jTextArea1.insert(cost, 0);    //column 2
        jTextArea1.insert(quantity, 0);       //column etc..
        jTextArea1.insert(itemName, 0);
        jTextArea1.insert("\n", 0);

Ответы [ 4 ]

3 голосов
/ 08 июня 2010

Бывают ситуации, когда (могучий) JTable слишком велик.

Если вы просто хотите JLabel / JTextArea-подобный компонент с некоторыми столбцами, используйте HTML-таблицу в JTextPane или в JEditorPane:

enter image description here

import java.awt.Font;
import javax.swing.JDialog;
import javax.swing.JTextPane;
import javax.swing.UIManager;
import javax.swing.text.html.HTMLDocument;

public class ColumnsInJTextPane
{

  public ColumnsInJTextPane()
  {
    double price = 124.75;
    int quantity = 3;
    String itemName = " iPad";

    JTextPane t = new JTextPane();
    t.setContentType( "text/html" );

    StringBuilder text = new StringBuilder( 150 );
    text.append( "<html><body>" );
    text.append( "<table border='0' style='margin:4px 2px 12px 6px' width='100%'>" );

    text.append( "<tr>" + "<td width='30' align='left' valign='top' style='margin-right:8px'>" );
    text.append( price );
    text.append( "</td>" );

    text.append( "<td align='left' valign='top' style='margin-right:8px'>" );
    text.append( itemName );
    text.append( "</td>" );

    text.append( "<td width='20' align='left' valign='top' style='margin-right:8px'>" );
    text.append( quantity );
    text.append( "</td>" + "</tr>" );

    text.append( "<tr>" + "<td>" );
    text.append( price * 4 );
    text.append( "</td>" );

    text.append( "<td>" );
    text.append( (((Boolean) itemName.equals( itemName )).toString().concat( itemName )) );
    text.append( "</td>" );

    text.append( "<td>" );
    text.append( quantity / 2 );
    text.append( "</td>" + "</tr>" );

    text.append( "</table>" );
    text.append( "</body></html>" );

    t.setText( text.toString() );

    //to get a consistent (body) appearance use the font from the Label using a CSS rule (instead of the value in javax.swing.text.html.default.css)
    Font font = UIManager.getFont( "Label.font" );
    String bodyRule =
    "body { font-family: " + font.getFamily() + "; " + "font-size: " + font.getSize() + "pt; }";
    ((HTMLDocument) t.getDocument()).getStyleSheet().addRule( bodyRule );

    JDialog d = new JDialog();
    d.add( t );
    d.pack();
    d.setVisible( true );
  }

  public static void main( String[] args )
  {
    new ColumnsInJTextPane();
  }

}

В этом примере есть некоторые хитрости и уловки, которые демонстрируют, насколько злой HTML на самом деле; -)

  • используется обрезка пробелов
  • второй столбец увеличивается / уменьшается с размером JDialog из-за пропущенной ширины в его теге td
  • Поля CSS были добавлены без особой причины
  • для согласованного внешнего вида шрифт JLabel должен быть извлечен из UIManager и установлен через CSS
  • если вы уменьшите ширину JDialog, текст во втором столбце будет красиво завернут в слова
    (ох, подождите! Это хорошая функция HTML)
1 голос
/ 06 июня 2010

Столбец относится к символу, поэтому если столбцы = 4, это означает, что ширина будет 4 символа в ширину.

1 голос
/ 06 июня 2010

Лучший подход - использовать JTable.

Но если вы действительно хотите использовать текстовый компонент, вы можете использовать JTextPane и играть с вкладками. Смотрите мой пример в Размер вкладки JTextPane .

0 голосов
/ 06 июня 2010

Ваш код вставляет ваш текст в ту же позицию! Замените 0 тем столбцом, в котором вы хотите разместить текст. И увидим результат

EDIT:

Размер столбца означает количество символов, а не слов. Как прокомментировано, посмотрите на JTable

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...