我试图在包含JTextPane的JScrollPane上实现智能自动滚动.JTextPane用于以彩色记录我的应用程序.然而,我正试图进行智能自动滚动.通过智能自动滚动我并不是指每次发生变化时盲目地自动滚动,我的意思是检查你是否一直向下滚动,然后自动滚动.然而,无论我做什么,它总是自动滚动或根本不自动滚动
作为测试脚本,这里是设置(JFrame已被忽略)
final JTextPane textPane = new JTextPane();
textPane.setEditable(false);
final JScrollPane contentPane = new JScrollPane(textPane);
contentPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
Run Code Online (Sandbox Code Playgroud)
这是丑陋的自动添加测试循环
while (true)
try {
Thread.sleep(1000);
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
try {
JScrollBar scrollBar = scroll;
boolean preCheck = ((scrollBar.getVisibleAmount() != scrollBar.getMaximum()) && (scrollBar.getValue() + scrollBar.getVisibleAmount() == scrollBar.getMaximum()));
System.out.println("Value: " + scroll.getValue()
+ " | Visible: " + scrollBar.getVisibleAmount()
+ " | Maximum: " + scrollBar.getMaximum()
+ " | Combined: " + (scrollBar.getValue() + scrollBar.getVisibleAmount())
+ …Run Code Online (Sandbox Code Playgroud) 我正在开发一个应用程序,我希望通过用户更新JTextArea的内容来触发某些内容,或者通过按下JButton手动触发.
我已经使用DocumentListener完成了第一部分,并将相关代码放在其insertUpdate方法中.
我之前没有使用过Actions,但我听说它们适用于需要多个控件触发的情况.是否可以从DocumentListener触发操作?根本不使用Actions是一个好主意,还是应该将我的代码放在普通方法中?
(在构造函数中):
textAreaInput.getDocument().addDocumentListener(new DocumentListener() {
public void insertUpdate(DocumentEvent e) {
// do something
}
public void removeUpdate(DocumentEvent e) {}
public void changedUpdate(DocumentEvent e) {}
});
Run Code Online (Sandbox Code Playgroud)
和行动,这是一个领域:
Action doSomething = new AbstractAction("Do Something!") {
@Override
public void actionPerformed(ActionEvent e) {
// do it
}
};
Run Code Online (Sandbox Code Playgroud)
澄清:
JTextArea将接收用户粘贴的文本,我想自动解析.解析依赖于GUI中其他位置设置的其他值; 如果用户更改了这些其他值,他可能想要重新解析文本,因此需要通过按下按钮来执行相同的操作.
我发现在这个答案部分解决这里,通过添加以下代码:
class CustomRenderer extends DefaultTableCellRenderer
{
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column)
{
Component c = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
c.setBackground(new java.awt.Color(255, 72, 72));
return c;
}
}
Run Code Online (Sandbox Code Playgroud)
然后将它传递给我的JTable对象:
jTable2.setDefaultRenderer(String.class, new CustomRenderer());
Run Code Online (Sandbox Code Playgroud)
这工作正常,现在表行为红色:

我现在唯一需要知道的是如何将着色限制为单行和单个单元格.
进一步研究后,我需要一个setCellRender()方法,以便我可以在特定单元格上设置自定义渲染,但此方法不存在.
我想创建一个逐步伪代码执行的可视组件.
为此,我创建了一个JTable,现在我正在寻找突出显示每一行(或单元格,因为只有一列)来显示正在执行哪一行的方法.
我在下面的最终GUI中包含了一个模型.正如你在Pseudocode面板中看到的那样,我突出了最后一行.
请忽略它们与问题没有严格关联的箭头.

我已经开始在Netbeans Matisse中实现这个模型(这是3种算法中的1种).但是我不知道如何突出code line 1JTable组件中的单行.
使用不同类型的组件会更容易吗?
稍后我还需要能够重新着色单个单元格,如模型的表格JPanel中所示.如何实施?

主要思想是尝试创建一个具有标准Linux类型终端外观的应用程序.现在我只限于Java,这就是我想要的.
有没有足够简单的方法来做这样的事情.这应该是一个文本处理应用程序,应该独立于系统并独立运行.所有工作逻辑都应该来自用户输入.
有任何想法吗?
从AbstractAction使用TextAction的目的是什么?以及如何将其用于以下内容:
插入符号
键绑定
当我的jTextArea处于焦点时,它允许文本突出显示,但是当它失去焦点时它不显示文本选择.即使用户将焦点移动到相关jFrame上的另一个组件,是否可以继续显示文本突出显示?
我已经实现了一个DocumentFilter子类,当我输入文本时JTextComponent,replace()调用过滤器的方法,而不是insertString()(从不调用).知道为什么会这样吗?
我需要创建一个派生自JTextComponent(从JTextPane,实际)的类,其中至少有一个默认键映射被更改.也就是说,在我特殊的JTextPane中,我希望">"键击执行操作而不是将该字符添加到文本窗格中,因为默认情况下会处理所有可打印的键入字符.
为了打破正常行为,有以下API:
JTextComponent.getKeymap() Keymap.addActionForKeyStroke()JTextComponent.setKeymap()但是,我发现尽管这些方法不是静态的,但它们会影响JTextComponent我的应用程序中所有s 使用的键盘映射.没有简单的机制可以克隆Keymap,可能会解决问题,或者我错过了什么.
我所追求的是一种改变我的JTextPane类的键映射的方法,但不是所有来自JTextComponent类的键.
或者我应该在别处寻找?
我有一个文件,我将逐行阅读.通过使用split方法将每一行拆分为单词,并根据单词的位置(每行的前4个字符等)对单词进行着色,也可以基于单词.不同的颜色应该应用于不同的单词,如下所示.我想知道哪个班级有用,我看了一下荧光笔.任何建议,举例都会非常有帮助
String text = textArea.getText();
String newLine = "\n";
String spaceDelim = "[ ]+";
String[] tokens;
String lines = text.split(newLine);
for(String line : lines) {
tokens = line.split(spaceDelim);
tokens[1] //should be in redColor
tokens[2] //should be in greenColor
tokens[3] tokens[4] //should in blueColor
}
Run Code Online (Sandbox Code Playgroud) 好吧,我不知道如何解决这个问题,只是在尝试在UI Text组件上放入一些较长的文本后才遇到这个问题.我已尝试通过Unity编辑器将值粘贴到其Text属性中,并以编程方式设置其值,如下所示:
t.GetComponent<Text> ().text = "This is where meat, fish, and [...] (long text)"
Run Code Online (Sandbox Code Playgroud)
由于水平换行已打开,因此文本在到达可用空间的边缘时会换行.
但是,文本向后显示.意思是,段落的开头位于底部,底部位于顶部.脱掉包装修复了这个,但是字体大小必须非常小(或者它不会全部可见),并且它不能形成正常的段落,因为它必须...你知道...换行.
这是Unity中的一个错误吗?
这就是发生的情况 - 正如您所看到的,它向后显示:
jtextcomponent ×10
java ×9
swing ×9
action ×2
text ×2
autoscroll ×1
colors ×1
fonts ×1
jscrollpane ×1
jtable ×1
key-bindings ×1
keymapping ×1
terminal ×1