当前位置: 首页 > 知识库问答 >
问题:

按下JButton是否有任何功能?

史淳
2023-03-14
public void keyPressed(KeyEvent ke) {
            if(ke.getKeyCode() == KeyEvent.VK_ENTER)
                sendButton.???
            else if(ke.getKeyCode() == KeyEvent.VK_ALT + KeyEvent.VK_ENTER)
                inputTextArea.setText(inputTextArea.getText() + "\n");
        }

在这一点上我应该做什么->???

还有什么有用的建议,教我,让我的程序发展:)

共有1个答案

何承
2023-03-14

不要将KeyListener与文本组件一起使用,这通常是不好的做法,相反,您希望控制KeyEvent.vk_enter键绑定操作,并在其中插入您的自定义功能...

现在,诀窍是,让现有的操作仍然工作,因为您不想要更多的工作,然后需要...

这可以通过获取与keyevent.vk_enter关联的操作来实现...

InputMap im = ta.getInputMap(JTextArea.WHEN_FOCUSED);
ActionMap am = ta.getActionMap();

Object key = im.get(KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, 0));
Action insertBreak = am.get(key);
am.put(key, new MyNewOnEnterAction(insertBreak));

//...

public class MyNewOnEnterAction extends AbstractAction {

    private Action proxy;

    public MyNewOnEnterAction(Action proxy) {
        this.proxy = proxy;
    }


    @Override
    public void actionPerformed(ActionEvent e) {
        // Your custom functionality here...
        proxy.actionPerformed(e);
    }

}
import java.awt.BorderLayout;
import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import java.awt.event.KeyEvent;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.AbstractAction;
import javax.swing.Action;
import javax.swing.ActionMap;
import javax.swing.InputMap;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.KeyStroke;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
import javax.swing.text.BadLocationException;
import javax.swing.text.Document;
import javax.swing.text.Element;
import javax.swing.text.JTextComponent;

public class Test {

    public static void main(String[] args) {
        new Test();
    }

    private JLabel status;

    public Test() {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                try {
                    UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
                } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
                    ex.printStackTrace();
                }

                JTextArea ta = new JTextArea(10, 10);
                InputMap im = ta.getInputMap(JTextArea.WHEN_FOCUSED);
                ActionMap am = ta.getActionMap();

                Object key = im.get(KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, 0));
                Action insertBreak = am.get(key);

                am.put(key, new MyNewOnEnterAction(insertBreak));

                status = new JLabel("...");

                JFrame frame = new JFrame("Testing");
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                frame.add(new JScrollPane(ta));
                frame.add(status, BorderLayout.SOUTH);
                frame.pack();
                frame.setLocationRelativeTo(null);
                frame.setVisible(true);
            }
        });
    }

    public void sendMessage(String message) {

    }

    public class MyNewOnEnterAction extends AbstractAction {

        private Action proxy;

        public MyNewOnEnterAction(Action proxy) {
            this.proxy = proxy;
        }

        public int getLineAtCaret(JTextComponent component) {
            int caretPosition = component.getCaretPosition();
            Element root = component.getDocument().getDefaultRootElement();

            return root.getElementIndex(caretPosition) + 1;
        }

        @Override
        public void actionPerformed(ActionEvent e) {
            JTextArea ta = (JTextArea) e.getSource();
            int line = getLineAtCaret(ta);
            try {
                int startPos = ta.getLineStartOffset(line - 1);
                int endPos = ta.getLineEndOffset(line - 1);
                Document doc = ta.getDocument();

                String text = doc.getText(startPos, endPos - startPos);
                status.setText(text);
            } catch (BadLocationException ex) {
                ex.printStackTrace();
            }

            proxy.actionPerformed(e);
        }

    }

}
 类似资料:
  • 问题内容: 您好,我正在命令行应用程序上工作,它可以接受命令行参数,例如 我正在寻找可以返回我对选项及其对应值的函数,例如c中的getopt。 问题答案: 那里有很多针对Java的命令行解析器库。 picocli是最近(截至2019年末)具有许多功能和特性的命令行解析器。 一些较老的流行类是commons- cli (相当古老),args4j和JCommander。

  • 问题内容: 有没有像MySQL中的任何功能和像甲骨文和其他DBMS提供的? 我想在查询中生成一个ID,但是在MySQL中这些功能不存在。还有其他选择吗? 问题答案: Mysql没有它们,但是您可以使用使用用户定义的变量的以下表达式进行模拟: 像这样: 但是如果您要重用该会话,它将仍然被设置,因此您需要像这样重置它: 参见SQLFiddle。 可能,但是火车残骸;我建议在应用程序层处理该要求。

  • 问题内容: 我想将其中一列中的数据转换为另一种语言… sql中是否有用于翻译它的函数? 问题答案: 不,没有SQL函数/过程可在Oracle数据库内置的语言之间进行转换。 Oracle Text具有用于多语言索引的功能;但这是用于索引文档而不是翻译它们。 Oracle 12c和更高版本还具有在不同SQL方言之间进行转换的功能;但这不是翻译数据。 如果要转换数据,则需要可以导入数据库或可以从数据库调

  • 问题内容: 我是Java的初学者,一直在研究如何检测用户是否按下了某个键(例如箭头键)。显然,有很多方法可以做到这一点,我发现此方法应该对我有用: 问题是我不知道什么是KeyEvent。 当我调用该方法并给我举个例子时,谁能告诉我在括号中加什么? PS:不要把我发送到其他站点,我可能已经看过了,他们只是让我更加困惑… 问题答案: public class KeyEvent extends Inpu

  • 问题内容: 最近,我遇到了有关javajava的博客文章http://java.dzone.com/articles/how-changing-java- package,其中 介绍了按功能打包Java代码。 我喜欢这个主意,但是对于这种方法我没什么疑问。我问了我一个问题,但没有得到满意的答复。我希望StackOverflow上的人可以澄清我的问题。 我喜欢按功能打包的想法,它极大地减少了在编码时

  • 问题内容: 在Java中,我有一个程序需要连续检查用户是否按下了键。所以在伪代码中,像 提前致谢! 问题答案: 在Java中,你不检查是否有键被按下,而不是你听到秒。实现目标的正确方法是注册一个,并实现它以维持所需密钥的状态: 然后,您可以随时使用: 当然,您可以使用相同的方法来实现键映射及其包裹在状态中的状态。