如果文本区域具有焦点,则PgUp和PgDn键当然可以正常工作,但是我希望使用键绑定将其向上或向下滚动,而不是将焦点移至文本区域并向后移动。
因此,我已将带有CTRL_DOWN_MASK的VK_PAGEDOWN映射到菜单项,希望当用户按下Ctrl+时PgDn,程序将文本区域滚动20行。
但是,尽管txaOutput.getLineCount()
返回文本区域中的行数,但我找不到将插入号行设置为该数字减20的方法。txaOutput.setCaretPosition(int i)
将插入号设置为BYTE number i
。
我所做的是伪造的,但它确实会滚动(除了,Page Up相同- scrollBytes
):
PageDown = new KeyBoundMenuItem("PAGEDOWN", VK_PAGE_DOWN, CTRL_DOWN_MASK)
{
@Override
public void action(ActionEvent e) {
scrollBytes = 20 * totalBytesInTextArea / txaOutput.getLineCount();
try{
txaOutput.setCaretPosition(txaOutput.getCaretPosition() + scrollBytes);
}catch(Exception ex){}
}
};
有没有一种方法来设置插入符到特定的行号在JTextArea
中JScrollPane
?
编辑
文本区域包含每行3到11个字母的单词。
编辑2
这就是为什么action
不是actionPerformed
:
import java.awt.event.ActionEvent;
import javax.swing.*;
import static javax.swing.KeyStroke.getKeyStroke;
public abstract class KeyBoundMenuItem extends JMenuItem{
public abstract void action(ActionEvent e);
public KeyBoundMenuItem(String actionMapKey, int key, int mask)
{
Action myAction = new AbstractAction()
{
@Override public void actionPerformed(ActionEvent e)
{
action(e);
}
};
setAction(myAction);
getInputMap(WHEN_IN_FOCUSED_WINDOW)
.put(getKeyStroke(key, mask),actionMapKey);
getActionMap().put( actionMapKey, myAction);
}
}
编辑3
可以用它代替KeyBoundMenuItem
:
public static void shortcut(JMenuItem item, int mnem, int mods, int key)
{
item.setMnemonic(mnem);
item.setAccelerator(getKeyStroke(key,mods));
}
但是已经为类似的类编写了代码KeyBoundButton
。轻松进行更改以使工作变得很晚。
编辑4
这是需要向上或向下滚动的文本:
有没有一种方法可以将插入符号设置为特定的行号
签出Text Utilities类。像这样的方法:
getLineAtCaret()
和gotoStartOfLine(...)
应该可以让您做自己想做的事。向下滚动即可:
int currentLine = RXTextUtilities.getLineAtCaret(textArea);
RXTextUtilities.gotoStartOfLine(textArea, currentLine + 10);
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句