2012-12-12 3 views
1

그래서 jTextbox와 키보드를 만들어야합니다. 입력하는 동안 색상을 변경하려면 해당 jButton이 필요합니다.자바 - jTextArea를 입력하는 동안 해당 jButton에 포커스를 설정하십시오.

현재 실행하면 포커스가 jTextbox에 있고 입력 할 수는 있지만 버튼에 포커스를 설정할 수 없습니다.

일부 도움을 주시면 대단히 감사하겠습니다. 당신이

private void aButtonKeyPressed(java.awt.event.KeyEvent evt) { 
    if (evt.getKeyCode() == KeyEvent.VK_A) 
    { 
     aButton.setBackground(Color.red);   
    } 
} 

private void aButtonKeyReleased(java.awt.event.KeyEvent evt) { 
    if (evt.getKeyCode() == KeyEvent.VK_A) 
    { 
     aButton.setBackground(Color.LIGHT_GRAY); 
    } 
} 

private void sButtonKeyPressed(java.awt.event.KeyEvent evt) { 
    if (evt.getKeyCode() == KeyEvent.VK_S) 
    { 
     sButton.setBackground(Color.red);   
    } 
} 

private void sButtonKeyReleased(java.awt.event.KeyEvent evt) { 
    if (evt.getKeyCode() == KeyEvent.VK_S) 
    { 
     sButton.setBackground(Color.LIGHT_GRAY);   
    } 
} 
+0

내가 왜 당신을 이해할 수 없었다 JButton에 초점을 맞추고 싶습니다. –

+0

어쩌면 나는 자신을 올바르게 표현하지 않을 것이기 때문에, 버튼을 누를 때마다 붉은 색에서 회색으로 색이 변하도록 버튼을 만들 필요가있다. –

+0

알겠습니다. 입력에 JTextField가 필요합니까? 내가 틀렸다면 나를 바로 잡아주세요. –

답변

0

당신은 KeyBindings를 참조 할 수 있습니다 감사합니다.
그러나 실제로 KeyListener를 원한다면 시도해보십시오.

yourJtextField.addKeyListener(new KeyAdapter() { 

     @Override 
     public void keyPressed(KeyEvent e){ 
      if(e.getKeyCode() == KeyEvent.VK_A){ 
      aButton.setBackground(yourColor); 
      } 
     } 

     @Override 
     public void keyReleased(KeyEvent e){ 
      aButton.setBackground(yourDefaultColor); 
     } 

    }); 

+0

도움을 주셔서 감사합니다. 나는 이것을 시도 할 것입니다. –

+0

그의 진술에 '하지만 버튼에 초점을 설정할 수 없기 때문에.' 그는 아마도 JTextField 대신에 특정 JButton에서 keyPressed 이벤트를 수행하고있을 것입니다. –

2

KeyListener를 구현하고 해당 클래스를 JButton에 제공하는 공통 클래스가 있어야합니다.

Map<Integer, JButton> keyCodeButtonMap = new HashMap<Integer, JButton>(); 
keyCodeButtonMap.put(KeyEvent.VK_A, aButton); // Example 

올바른 버튼과 함께지도에 모두의 KeyEvent 가상 키 추가 키 코드와의 JButton

를 저장하는지도 되세요.

private void buttonKeyPressed(java.awt.event.KeyEvent evt) { 
    keyCodeButtonMap.get(evt.getKeyCode()).setBackground(Color.RED); 
    keyCodeButtonMap.get(evt.getKeyCode()).setForeground(Color.RED); 
} 

private void buttonKeyReleased(java.awt.event.KeyEvent evt) { 
    keyCodeButtonMap.get(evt.getKeyCode()).setBackground(Color.LIGHT_GRAY); 
    keyCodeButtonMap.get(evt.getKeyCode()).setForeground(Color.LIGHT_GRAY); 
} 

이상적으로 작동해야합니다.

+0

대단히 고마워, 나는 이것을 시도하고 잘하면 "올바른 대답"으로 돌아올거야. –

+1

그는 전경을 바꾸고 싶지는 않지만 여전히 좋은 +1입니다. – Mordechai

1

나는 아마도 당신이 색상을 변경하고 클릭 만들고 싶어, 당신은 JButton 포커스 (그렇지 않으면 늘 JTextArea/JTextField 등을 입력 할 수)를 설정하려는 생각 해달라고 할 때 특정 문자 (들) 입력 되었습니까?

  • 스윙 구성 요소를 사용하는 경우 다른 사람이 제안한대로 KeyBindings을 사용하십시오.

    enter image description here

    : 여기

내가 이루어지는 예이다. 버튼 배경이 파란색으로 변경됩니다 누르면 (버튼 방법은 자동으로 삽입되는 SPACE 후라고합니다 '.') :

enter image description here

import java.awt.BorderLayout; 
import java.awt.Color; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import java.awt.event.KeyEvent; 
import javax.swing.AbstractAction; 
import javax.swing.JButton; 
import javax.swing.JComponent; 
import javax.swing.JFrame; 
import javax.swing.JTextField; 
import javax.swing.KeyStroke; 
import javax.swing.SwingUtilities; 

public class Test { 

    final JFrame frame = new JFrame(); 
    final JTextField jtf = new JTextField(15); 
    final JButton button = new JButton("SPACE"); 

    public Test() { 
     initComponents(); 
    } 

    public static void main(String[] args) { 
     SwingUtilities.invokeLater(new Runnable() { 
      @Override 
      public void run() { 
       new Test(); 
      } 
     }); 
    } 

    private void initComponents() { 

     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

     button.addActionListener(new ActionListener() { 
      @Override 
      public void actionPerformed(ActionEvent ae) { 
       insertSpace(); 
      } 
     }); 

     final Color defaultColor = button.getBackground(); 

     jtf.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(KeyStroke.getKeyStroke(KeyEvent.VK_PERIOD, 0, true), "period rel"); 
     jtf.getActionMap().put("period rel", new AbstractAction() { 
      @Override 
      public void actionPerformed(ActionEvent ae) { 
       //button.doClick(); //I dont like this as it makes JBUtton look like its being clicked where as we want a color change 
       insertSpace(); 
       button.setBackground(defaultColor); 
      } 
     }); 

     jtf.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(KeyStroke.getKeyStroke(KeyEvent.VK_PERIOD, 0), "period pressed"); 
     jtf.getActionMap().put("period pressed", new AbstractAction() { 
      @Override 
      public void actionPerformed(ActionEvent ae) { 
       button.setBackground(Color.CYAN); 
      } 
     }); 

     frame.add(jtf, BorderLayout.NORTH); 
     frame.add(button, BorderLayout.SOUTH); 

     frame.pack(); 
     frame.setVisible(true); 
    } 

    private void insertSpace() { 
     String s = jtf.getText(); 
     jtf.setText(s + " "); 
    } 
} 
관련 문제