簡體   English   中英

JTextArea Java的ActionListener

[英]ActionListener from JTextArea Java

我是Java的新手,正在嘗試為我的程序弄清楚最后一件事。

這是我編寫的程序,布局合理,完全沒有問題。

在此處輸入圖片說明

現在我的程序假設只要在鍵盤上按下它,就突出顯示按鈕(不要通過按屏幕上的按鈕)

我不確定我必須使用什么,因為它需要執行的操作是當他們在JTextArea鍵入它時。 我正在嘗試將KeyEventKeyPressed一起使用,但不確定這樣做是否正確,因為它實際上無法正常工作。

我目前無法在此處發布代碼,因為這是一項作業,並且我不希望我的一些同學去google並在他們在這里找到的情況下使用它。 (大聲笑)

根據需要,這里是我的代碼:)

import javax.swing.*; // import all javax.swing
import java.awt.*; // import all java.awt
import java.awt.event.*;

public class Sample extends JFrame implements KeyListener { // start of the
                                                            // class

    private JTextArea field = new JTextArea(10,15); // create an instance of
                                                        // JTextField
    private JPanel mainPanel = new JPanel(); // create an instance of JPanel
    private JPanel TopFieldPan = new JPanel();
    private JPanel MainBtnsPan = new JPanel();
    private JPanel FifthRowPan = new JPanel();

    JPanel fifthBtn = new JPanel();

    private static JButton Space = new JButton("");

    public Sample() { // start of the weather constructor

        Space.setPreferredSize(new Dimension(280, 45));
        fifthBtn.add(Space);


        TopFieldPan.add(field);

        FifthRowPan.setLayout(new BoxLayout(FifthRowPan, BoxLayout.X_AXIS));
        FifthRowPan.add(fifthBtn);
        MainBtnsPan.setLayout(new GridLayout(5, 5, 0, 0));

        MainBtnsPan.add(FifthRowPan);

        mainPanel.add(TopFieldPan);
        mainPanel.add(MainBtnsPan);

        this.add(mainPanel);

        Space.setSelected(true);
        field.addKeyListener(this); // important !!!

        setTitle("Typing Tutor"); // set the title to the frame
        setSize(300, 300); // set the fixed size
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
        setLocationRelativeTo(null); 
        setVisible(true); // make it visible

    } // ends of the constructor

    public void keyPressed(KeyEvent e) {

        if (e.getKeyCode() == KeyEvent.VK_SHIFT) {
            Space.setBackground(Color.green);

        }


    }

    public void keyReleased(KeyEvent evt) {
        Space.setBackground(null);
    }

    public void keyTyped(KeyEvent evt) {
        // TODO Auto-generated method stub

        if(evt.getKeyChar() == 'a' || evt.getKeyChar() ==  'A')
        {
            Space.setBackground(Color.green);
        }
        else if(evt.getKeyChar() == 'b' || evt.getKeyChar() == 'B')
        {
            Space.setBackground(Color.red);
        }       
    }

    public static void main(String[] args) { // start of the main method

        new Sample();

    } // ends of main method

} // ends of class

我盡力簡化了代碼,這是最后一個。

所以我要把它當我按下aA應該強調的是空間的JButton。

創建一個按鈕和它們所映射的鍵的映射,如下所示:

Map<String, JButton> buttonMap = new HashMap<String, Button>();

然后,在添加按鈕時,將其添加到地圖,如下所示:

buttonMap.put(FirstRow[i].toLowerCase(), btn);

然后,將以下內容添加到您的KeyTyped中:

public void keyTyped(KeyEvent evt) {
    String keyPressed = new String(""+evt.getKeyChar()).toLowerCase();
    JButton tmp = buttonMap.get(keyPressed);
    if(null != tmp){
        tmp.doClick();
    }
}

我很快對您的第1行和第2行的代碼進行了處理。您必須對其進行處理才能使其適用於特殊鍵,但是它應該可以將您帶到嘗試的位置。

我將其粘貼在此處,以縮小答案范圍。 http://pastebin.com/t1v8d6Hi

您的代碼在第一遍看起來還不錯,您似乎已經具備與KeyListener一起使用的基本機制。 您可能需要考慮如何停止對按鈕的鼠標單擊,JButton.setEnabled(false)可以工作,但是會更改按鈕的繪制方式,因此您可能需要覆蓋paint方法。 您可能只需要將keylistener掛接到一個組件上,該窗口將獲得所有事件,即具有焦點的文本區域。 您的主要任務是弄清楚如何將按鍵事件映射到按鈕,也許使用哈希圖或其他東西來存儲JButton,而按鍵是字符代碼?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM