Привет, я работаю над приложением для чата, и я хочу, чтобы пользователь мог изменить шрифт, который он/она пишет. есть функция setFont()
, но она меняет шрифт всех строк в TextArea. поэтому я просто хочу изменить только свой шрифт. Я ценю, если вы можете мне помочь.
изменить шрифт определенных строк в JTextArea
Ответы (4)
ну тогда я думаю, я должен выучить немного HTML
Я бы не стал использовать HTML. Мне проще просто использовать атрибуты при работе с текстовой панелью. Атрибуты гораздо проще изменить, чем пытаться манипулировать HTML.
SimpleAttributeSet green = new SimpleAttributeSet();
StyleConstants.setFontFamily(green, "Courier New Italic");
StyleConstants.setForeground(green, Color.GREEN);
// Add some text
try
{
textPane.getDocument().insertString(0, "green text with Courier font", green);
}
catch(Exception e) {}
textPane.getDocument().getLength()
.
- person camickr; 07.09.2011
Вы должны работать с JTextPane. JTextPane позволяет вам использовать HTML. Посмотрите следующий пример:
this.text_panel = new JTextPane();
this.text_panel.setContentType("text/html");
this.text_panel.setEditable(false);
this.text_panel.setBackground(this.text_background_color);
this.text_panel_html_kit = new HTMLEditorKit();
this.text_panel.setEditorKit(text_panel_html_kit);
this.text_panel.setDocument(new HTMLDocument());
Здесь вы включаете HTMLEditorKit, что позволит вам использовать HTML в вашей TextPane. Вот еще один фрагмент кода, где вы можете добавить цветной текст на панель:
public void append(String line){
SimpleDateFormat date_format = new SimpleDateFormat("HH:mm:ss");
Date date = new Date();
line = "<div><font size=3 color=GRAY>[" + date_format.format(date) + "]</font><font size=3 color=BLACK>"+ line + "</font></div>";
try {
this.text_panel_html_kit.insertHTML((HTMLDocument) this.text_panel.getDocument(), this.text_panel.getDocument().getLength(), line, 0, 0, null);
} catch (Exception e) {
e.printStackTrace();
}
}
Надеюсь, это поможет,
Сергей.
Вы не можете сделать это с JTextArea
, но вы можете сделать это с его более красивым родственником, JTextPane
. К сожалению, это не тривиально; вы можете узнать об этом классе здесь.
Различные компоненты Swing будут отображать базовый HTML (версия 3.2), включая JLabel
и JEditorPane
. Дополнительные сведения см. в разделе Как использовать HTML в компонентах Swing в Учебник по Java.
Вот простой пример использования последнего.
import java.awt.*;
import javax.swing.*;
class ShowFonts {
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
GraphicsEnvironment ge = GraphicsEnvironment.
getLocalGraphicsEnvironment();
String[] fonts = ge.getAvailableFontFamilyNames();
String pre = "<html><body style='font-size: 20px;'><ul>";
StringBuilder sb = new StringBuilder(pre);
for (String font : fonts) {
sb.append("<li style='font-family: ");
sb.append(font);
sb.append("'>");
sb.append(font);
}
JEditorPane ep = new JEditorPane();
ep.setContentType("text/html");
ep.setText(sb.toString());
JScrollPane sp = new JScrollPane(ep);
Dimension d = ep.getPreferredSize();
sp.setPreferredSize(new Dimension(d.width,200));
JOptionPane.showMessageDialog(null, sp);
}
});
}
}
JFrame
. ;)
- person Andrew Thompson; 06.09.2011
JTextPane
, в какой-то момент также должно будет вызвать setPreferredSize()
. Не стесняйтесь доказывать, что я ошибаюсь.
- person Andrew Thompson; 07.09.2011
JTextPane
— отличный выбор для этого варианта использования.
- person Andrew Thompson; 07.09.2011
JEditorPane
или JTextPane
без использования setPreferredSize()
, магических чисел (указывающих размер), переданных в ограничения или конструктор макета, или HTML с CSS, указывающим ширину? ( * И я действительно имею в виду «за исключением гадания или гаруспики». ;)
- person Andrew Thompson; 07.09.2011