[英]My Java Actionlistener won't change a JTextArea when a JButton is pressed
[英]ActionListener from JTextArea Java
我是Java的新手,正在嘗試為我的程序弄清楚最后一件事。
這是我編寫的程序,布局合理,完全沒有問題。
現在我的程序假設只要在鍵盤上按下它,就突出顯示按鈕(不要通過按屏幕上的按鈕)
我不確定我必須使用什么,因為它需要執行的操作是當他們在JTextArea
鍵入它時。 我正在嘗試將KeyEvent
與KeyPressed
一起使用,但不確定這樣做是否正確,因為它實際上無法正常工作。
我目前無法在此處發布代碼,因為這是一項作業,並且我不希望我的一些同學去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
我盡力簡化了代碼,這是最后一個。
所以我要把它當我按下a
或A
應該強調的是空間的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.