Логин:   Пароль:






Новости
Рассылки
Форум
Поиск


Java
- Апплеты
- Вопрос-ответ
- Классы
- Примеры
- Руководства
- Статьи
- IDE
- Словарь терминов
- Скачать

Мобильная Java
- Игры
- Примеры
- Статьи
- WAP, WML и пр.

JavaScript
- Вопрос-ответ
- Примеры
- Статьи

Веб-мастеринг
- HTML
- CSS
- SSI

Разминка для ума
Проекты
Книги
Ссылки
Программы
Юмор :)




Rambler's Top100
Rambler's Top100

Java: СтатьиКак избежать перенос в JTextPane. Java JDK 1.5

Как избежать перенос в JTextPane. Java JDK 1.5

Для написания примитивных текстовых редакторов чаще всего используются такие компоненты как JEditorPane, JTextPane и JTextArea. В отличие от JTextArea компоненты JEditorPane и JTextPane способны поддерживать работу со стилизированным текстом. JTextArea не позволяет использовать стилизированный цветной текст, но позволяет управлять переносом с помощью метода setLineWrap(boolean wrap).

JTextPane является производным классом от JEditorPane и имеет массу встроенных методов для работы со стилизированным текстом. Но недостаток этого компонента в том, что по умолчанию производится автоматический перенос в рамках видимой области. Это продемонстрировано в следующей программе JTextPaneDemo1.java и на рис. 1.

/**

 *  @author <a href="mailto:zagrebin_v@mail.ru"> Victor Zagrebin </a>.

 */

import java.awt.*;

import java.awt.event.*;

import javax.swing.*;

import javax.swing.text.*;

public class JTextPaneDemo1 extends JFrame

{

 

 public void init() throws Exception

 {

  JFrame jf = new JFrame(“JTextPaneDemo1”);

  Container contentPane = jf.getContentPane();

  JTextPane jtp = new JTextPane();

  JScrollPane jScrollPane1 = new JScrollPane();

  jScrollPane1.setBounds(new Rectangle(13, 16, 200, 100));

  jScrollPane1.getViewport().add(jtp);

  jf.setSize(200,100);

  contentPane.add(jScrollPane1);

  jf.setVisible(true);

 }

 

 public static void main(String args[]) throws Exception
     {
      JTextPaneDemo1 jc = new JTextPaneDemo1();
      jc.addWindowListener(new WindowAdapter()
      {
       public void windowClosing(WindowEvent e)
       {
        System.exit(0);
       }
      });

  jc.init();
     }

}

Рисунок 1 — Автоматический перенос в компоненте JTextPane

Первая проблема, с которой сталкивается программист – отсутствует горизонтальный скроллинг. Выставить принудительно появление горизонтального скроллинга не дает никаких результатов. В следующей программе JTextPaneDemo2.java показано как решается данная проблема. В JTextPane следует переопределить два метода setSize(Dimension d) и getScrollableTracksViewportWidth().

/**

 *  @author <a href="mailto:zagrebin_v@mail.ru"> Victor Zagrebin </a>.

 */

import java.awt.*;

import java.awt.event.*;

import javax.swing.*;

import javax.swing.text.*;

import java.io.*;

 

public class JTextPaneDemo2 extends JFrame

{

 

 public void init() throws Exception

 {

  final int w = 649;

  final int h = 416;

  JTextPane textPane = new JTextPane();

  textPane = new JTextPane()

  {

   public void setSize(Dimension d)

   {

    if(d.width <= getParent().getSize().width)

    {

     d.width = getParent().getSize().width;

    }

    super.setSize(d);

   }

 

   public boolean getScrollableTracksViewportWidth()

   {

    return false;

   }

  };

 

  JFrame jf = new JFrame(“JTextPaneDemo2”);

  Container contentPane = jf.getContentPane();

  contentPane.setLayout(null);

  JScrollPane scrollPane = new JScrollPane();

  scrollPane.setBounds(new Rectangle(12, 12, w, h));

  scrollPane.getViewport().add(textPane);

  contentPane.add(scrollPane);

  jf.setSize(700,550);

  jf.setVisible(true);

 }

 

 public static void main(String args[]) throws Exception

 {

  JTextPaneDemo2 jc = new JTextPaneDemo2();

  jc.addWindowListener(new WindowAdapter()

  {

   public void windowClosing(WindowEvent e)

   {

    System.exit(0);

   }

  });

  jc.init();

 }

 

}

Рисунок 2 — Отмена автоматического переноса в компоненте JTextPane

Из рис. 2 видно как ликвидирован автоматический перенос. Однако этот метод принесет массу проблем, если использовать JSDK ниже весии 1.5. Среди этих проблем будут встречаться следующие:

  • автоперенос все равно будет срабатывать после набора нескольких тысяч символов;
  • копирование и многократная вставка длинных строк приведет к зависанию;
  • зона видимости может не соответствовать набранным символам.

В JSDK 1.5 эти проблемы не встречались.

Ссылки

  1. Форум: Sun Microsystems, раздел: Swing, тема: JTextPane: how to avoid wrap?
    http://www.java.sun.com
  2. Форум: Juga_Ru, раздел: Java для каждого, тема: Как сделать JtextArea цветным…?
    http://forum.juga.ru




Warning: mysql_connect() [function.mysql-connect]: Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2) in /pub/home/javaport/javaportal/books/show2b.php on line 11

Warning: mysql_db_query() [function.mysql-db-query]: Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2) in /pub/home/javaport/javaportal/books/show2b.php on line 19

Warning: mysql_db_query() [function.mysql-db-query]: A link to the server could not be established in /pub/home/javaport/javaportal/books/show2b.php on line 19

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /pub/home/javaport/javaportal/books/show2b.php on line 30
Узнай о чем ты на самом деле сейчас думаешь тут.


[an error occurred while processing this directive]



Warning: mysql_connect() [function.mysql-connect]: Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2) in /pub/home/javaport/javaportal/news/worldnews.php on line 91

Warning: mysql_db_query() [function.mysql-db-query]: Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2) in /pub/home/javaport/javaportal/news/worldnews.php on line 93

Warning: mysql_db_query() [function.mysql-db-query]: A link to the server could not be established in /pub/home/javaport/javaportal/news/worldnews.php on line 93

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /pub/home/javaport/javaportal/news/worldnews.php on line 95