KeyPressed를 이용하여 버튼 텍스트를 입력해주는 프로그램입니다.
현재 영어랑 숫자만 입력할 수 있구요.
게임같은 것에서 단축키를 바꿀때 환경설정을 가서 버튼에 해당하는 것을 누르고 키를 입력한 다음 변경을 누르면
그키 하나받을수 있는것을 모티브로 해서 만들어봤습니다.
대부분 설명은 주설처리 해놨습니다.
코드입니다~
usingButton.java |
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class usingButton {
JLabel keyLabel;
JTextField keysetNumTxt;
JFrame frame, keyFrame;
JPanel centerPanel;
JButton eventBtn;
JButton[] btn = new JButton[16];
Container contentPane;
String keyString = "";
// 생성자
public usingButton() {
// Frame
frame = new JFrame("키바꾸기");
frame.setPreferredSize(new Dimension(500, 500));
frame.setLocation(350, 100);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setVisible(true);
centerPanel = new JPanel();
contentPane = frame.getContentPane();
contentPane.setLayout(new BorderLayout());
// 패널에 버튼 16개 추가
centerPanel.setLayout(new GridLayout(4, 4));
for (int i = 0; i < 16; i++) {
btn[i] = new JButton();
centerPanel.add(btn[i]);
BtnArrayListener bingoBtnClickListener = new BtnArrayListener();
btn[i].addActionListener(bingoBtnClickListener);
}
// Frame Layout
frame.getContentPane().add(BorderLayout.CENTER, centerPanel);
}
class TextClickListener implements MouseListener {
public void mouseEntered(MouseEvent e) {
}
public void mouseExited(MouseEvent e) {
}
public void mousePressed(MouseEvent e) {
}
public void mouseReleased(MouseEvent e) {
JTextField text = (JTextField) e.getSource();
text.setText("");
}
public void mouseClicked(MouseEvent e) {
}
}
// 16개 중 하나를 클릭했을 때 리스너
class BtnArrayListener implements ActionListener {
public void actionPerformed(ActionEvent event) {
eventBtn = (JButton) event.getSource();
keyFrame = new JFrame("버튼변경");
JPanel panel1 = new JPanel();
JPanel panel2 = new JPanel();
Container contentPane1 = keyFrame.getContentPane();
contentPane1.setLayout(new BorderLayout());
// 프레임 생성
keyFrame.setPreferredSize(new Dimension(400, 100));
keyFrame.setLocation(500, 400);
keyFrame.setVisible(true);
keyFrame.pack();
// 레이블 생성
keyLabel = new JLabel("영어나 숫자를 입력하신후 키보드의 enter를 눌러주세요.");
// 텍스트필드 생성
keysetNumTxt = new JTextField("", 10);
TextClickListener textClickListener = new TextClickListener();
keysetNumTxt.addMouseListener(textClickListener);
KeyPressed keyPressed = new KeyPressed();
keysetNumTxt.addKeyListener(keyPressed); // 텍스트필드에 키가 입력되었을 때 리스너 호출
// 패널 추가
panel1.add(keyLabel);
panel2.add(keysetNumTxt);
// 프레임 레이아웃
keyFrame.getContentPane().add(BorderLayout.NORTH, panel1);
keyFrame.getContentPane().add(BorderLayout.CENTER, panel2);
}
}
class BtnClickListener implements ActionListener {
public void actionPerformed(ActionEvent event) {
eventBtn = (JButton) event.getSource();
eventBtn.setText("0");
}
}
// 버튼에서 불러온 프레임에 키입력시 리스너
class KeyPressed implements KeyListener {
public void keyPressed(KeyEvent e) {
keyString += e.getKeyChar();
System.out.println(e.getKeyCode());
if (e.getKeyCode() == 10) { // 엔터키가 눌렸을때 실행조건
eventBtn.setText(keyString); // 입력값을 넣어야할 버튼에 입력
keyString = ""; // 입력 후 텍스트 전역변수 초기화
keyFrame.setVisible(false); // 입력창 종료
}
}
public void keyReleased(KeyEvent e) {
// numText.setText(keyString);
}
public void keyTyped(KeyEvent e) {
// inputKeyFrame.setVisible(false);
}
}
public static void main(String[] args) {
usingButton start = new usingButton();
}
}
댓글