我需要知道如何做到这一点:
让我们说:我有一个JTextArea像这样的代码:
LOAD R1, 1
DEC R1
STORE M, R1
ADD R4, R1,8
Run Code Online (Sandbox Code Playgroud)
我想改变的颜色LOAD,DEC,STORE并ADD以颜色为蓝色
R1,R4以色绿
M到红号橙色
如何更改此文字的颜色?这些文本来自记事本或可以直接键入文本区域.
我将JTextArea添加到具有布局管理器的组件,该布局管理器尊重首选大小和位置.但是,在输入几个"宽"字母(例如'm')后,显示的插入符号在JTextArea中的位置会变得错误:

这是在输入左边的所有字母后,实际的插入位置在'd'之后.在这种情况下,JTextArea比文本宽得多.不确定它是否相关,但使用的字体是Arial,大小11,普通样式,并且在将JTextArea添加到父容器之前正在设置.可能导致这种情况的任何想法?
在我可以找到的所有使用a的例子中JTextArea,高度和宽度在构造之前是已知的JTextArea,如果JTextArea需要更多高度,那么它被放在a中JScrollPane.显然,高度JTextArea取决于宽度和文本内容.
现在,我的情况要求我不使用a JScrollPane,而是JTextArea要足够高以显示所有文本.当我创建时JTextArea,我知道文本内容以及它必须使用的宽度; 我不知道高度 - 我希望在不切断任何文本的情况下尽可能小.这似乎很难实现.
作为旁注,JTextArea将添加到JPanel没有布局管理器的 - 它使用基于添加的组件的首选大小的绝对定位.这要求我JTextArea将返回正确的尺寸getPreferredSize().正确的尺寸应该是我在构造时提供的宽度,以及显示具有所提供宽度的所有文本所需的最小高度.
我发现了一些类似的线程,讨论了有关的奇怪/错误JTextArea,有时通过pack()在父容器上调用两次来解决.这对我来说不是一个选择.我很想基本上创建我自己JTextArea的宽度和字符串,并根据宽度和字体设置计算必要的最小高度,但我想我会先考虑先花费时间才能做到这一点.
希望我的问题很明确.感谢大家的帮助!
我目前正在使用Swing的控制台窗口.它基于JTextArea,就像一个通用命令行.在一行中键入命令,然后按Enter键.在下一行中,显示输出,在该输出下,您可以编写下一个命令.
现在我想,你只能用你的命令编辑当前行.上面的所有行(旧命令和结果)都应该是不可编辑的.我怎样才能做到这一点?
我使用Swing库创建了一个Java程序.现在我想将我的控制台输出重定向到JFrame或JPanel.
我一直在寻找这个,到目前为止,我能够想出的是如何创建一个样式并将其应用于这样的角色:
StyledDocument doc = (StyledDocument) new DefaultStyledDocument();
JTextPane textpane = new JTextPane(doc);
textpane.setText("Test");
javax.swing.text.Style style = textpane.addStyle("Red", null);
StyleConstants.setForeground(style, Color.RED);
doc.setCharacterAttributes(0, 1, textpane.getStyle("Red"), true);
Run Code Online (Sandbox Code Playgroud)
如果您的文档中只有少量样式并希望按名称存储它们,以便以后可以轻松应用它们,这将非常有用.在我的应用程序中,我希望能够为文本中的每个字符独立设置前景色(仅少数值之一)和背景色(灰度,许多不同的值).为此创建潜在的数百/数千种不同风格似乎是一种巨大的浪费.有没有办法设置这些属性,而不必每次都创建一个新的样式?如果我只需渲染文本会更容易,但我也需要使其可编辑.有没有办法做到这一点JTextPane,还是有另一个提供此功能的swing类?
如何确定第一个可见行的数量和当前在可滚动的JTextArea(JScrollPane中的JTextArea)中可见的行数?
当我尝试使用更改JTextArea的颜色时
textArea.setText("<html> <font color=\"red\"> Hi </font></html>")
Run Code Online (Sandbox Code Playgroud)
,文本显示基本上是整个文本写在setText方法中.但类似的事情适用于JLabel,JButton等.
我怎样才能为JTextArea做到这一点?
最近我注意到Java文本组件使用换行符(LF \n,, 0x0A)来在内部表示和解释换行符.这让我感到非常惊讶,并提出我的假设,在System.getProperty('line.separator') 任何地方使用都是一个很好的做法,在问号下.
看来,无论何时处理文本组件,在使用提到的属性时都应该非常小心,因为如果使用JTextComponent.setText(String),最终可能会得到一个包含不可见换行符的组件(例如CR).除非可以将文本组件的内容保存到文件中,否则这可能看起来不那么重要.如果使用所有文本组件提供的方法将文本保存并打开到文件,则在重新打开文件时,隐藏的换行符会突然显示在组件中.原因似乎是该JTextComponent.read(...)方法进行了规范化.
那么为什么不JTextComponent.setText(String)规范化线路结束?或者是否允许在文本组件中修改文本的任何其他方法?System.getProperty('line.separator')处理文本组件时是否使用了良好的做法?这是一个好习惯吗?
一些代码将这个问题放到透视中:
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.Reader;
import java.io.UnsupportedEncodingException;
import java.io.Writer;
import javax.swing.AbstractAction;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.SwingUtilities;
public class TextAreaTest extends JFrame {
private JTextArea jtaInput;
private JScrollPane jscpInput;
private JButton jbSaveAndReopen;
public TextAreaTest() { …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用OpenDyslexic作为Swing应用程序中的字体选项.但令人惊讶的是,OpenDyslexic看起来比同一点大小的任何其他字体大得多,即使它在其他应用程序中看起来通常很大.我尝试了一些其他OpenType字体,它们看起来并不特别大或小.为什么OpenDyslexic在Java中如此之大,如何让Java正常大小以便我不需要特殊情况下OpenDyslexic的大小?
在所有操作系统上的Oracle JRE(我试过1.7.0_11,1.7.0_15和最新的1.7.0_21)上,当Java加载字体文件时,字体太大了Font.createFont.但是,当我将字体安装到操作系统中时,所有3个平台上的行为都不同:
~/.fonts没有用.在安装字体之前和安装后,屏幕截图看起来一样.更新:有趣的是,OpenJDK(Linux中的7u21 Ubuntu软件包和OS X上的obuildfactory构建版本)都没有出现这个bug.OpenFDK上的15pt OpenDyslexic'm'应该是15px宽,无论是从文件创建字体还是由操作系统处理字体时都是如此.该错误发布在最新的Oracle JRE中,但不在最新的OpenJDK中.
这是我的示例程序.请注意,要尝试它,您需要将OpenDyslexic文件放入资源/.或者,将OpenDyslexic安装到您的系统中并取出registerFonts()呼叫.

import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.Font;
import java.awt.FontFormatException;
import java.awt.GraphicsEnvironment;
import java.io.IOException;
import java.io.InputStream;
import java.lang.reflect.InvocationTargetException;
import java.util.Arrays;
import java.util.HashSet;
import java.util.Locale;
import javax.swing.DefaultComboBoxModel;
import javax.swing.DefaultListCellRenderer;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.JTextArea;
import javax.swing.SwingUtilities;
import javax.swing.WindowConstants;
import javax.swing.event.ListDataEvent;
import javax.swing.event.ListDataListener;
public class FontFrame …Run Code Online (Sandbox Code Playgroud)