gpt4 book ai didi

java - JTextPane:KeyBindings 不适用于 StyledEditorKit

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:22:16 25 4
gpt4 key购买 nike

请看下面的代码

import java.awt.Color;    
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.*;
import javax.swing.text.*;

public class Form1 extends JFrame
{
private JTextPane textPane;
private JPanel south;
private JScrollPane scroll;

private String content;
public String documentType;


private DefaultStyledDocument document;
int start, end, offset1,length1;
private JButton button;
JFrame frame;


public Form1()
{

//Declaring the instance variables
textPane = new JTextPane();
textPane.setMinimumSize(new Dimension(100,100));

button = new JButton("Bold");
button.addActionListener(new StyledEditorKit.BoldAction());
button.getInputMap().put(KeyStroke.getKeyStroke(KeyEvent.VK_B,KeyEvent.CTRL_MASK),"key");
button.getActionMap().put("key", new StyledEditorKit.BoldAction());

document = (DefaultStyledDocument) textPane.getDocument();




//Creating the main window
south = new JPanel();
south.setLayout(new FlowLayout());
south.add(button);
scroll = new JScrollPane(textPane);

getContentPane().add(scroll,"Center");
getContentPane().add(south,"South");

setSize(800,600);
validate();
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}


private class Action extends AbstractAction
{
public void actionPerformed(ActionEvent ae)
{
new StyledEditorKit.BoldAction();
}
}

public static void main(String[] args) throws Exception {
SwingUtilities.invokeLater(new Runnable()
{
@Override
public void run() {
Form1 f = new Form1();
f.setVisible(true);
}
});
}
}

在这里,用户可以输入任何文字,当他选择一个文字并点击“粗体”按钮时,该文字就会变成粗体。但是,我还需要使用 CTRL+B 来完成。如您所见,我的尝试并未对该关键事件做出任何响应。我什至尝试将它添加到扩展 AbstractAction 的单独类中,但仍然没有用。我怎样才能在这里实现 CTRL+B?请帮助...

最佳答案

当键绑定(bind)对我不起作用时,我首先查看的是 InputMap——我确定我使用的是正确的吗?那么,你确定吗?默认使用 JComponent.WHEN_FOCUSED,因此仅当您的组件具有焦点时才有效。

如果您希望它在其他时间工作,比如当绑定(bind)组件可见并位于焦点窗口中但不一定具有焦点本身时,也许您应该尝试不同的条件参数。尝试使用 JComponent.WHEN_IN_FOCUSED_WINDOW 开始。

即,

InputMap inputMap = myComponent.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW);

关于java - JTextPane:KeyBindings 不适用于 StyledEditorKit,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10674312/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com