package com.javaxyq.ui; import java.awt.Color; import java.awt.Graphics; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.KeyEvent; import java.awt.event.KeyListener; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.util.ArrayList; import java.util.List; import javax.swing.JTextField; import javax.swing.SwingUtilities; import javax.swing.UIManager; import com.javaxyq.event.EventDelegator; import com.javaxyq.util.UIUtils; public class TextField extends JTextField { private static final long serialVersionUID = 5663220885858934210L; private static final String uiClassID = "GameTextFieldUI"; static { UIManager.put("GameTextFieldUI", GameTextFieldUI.class.getName()); } private List<String> historyInputs; private int historyIndex = -1; private int maxHistoryCount = 15; /** �Ƿ�����ʷ��¼ */ private boolean history = true; private class Handler extends MouseAdapter implements KeyListener, ActionListener { public void mouseEntered(MouseEvent e) { //TODO set text cursor // try { // GameMain.setCursor(com.javaxyq.widget.Cursor.TEXT_CURSOR); // } catch (Exception e1) { // } } public void mouseExited(MouseEvent e) { // try { // GameMain.restoreCursor(); // } catch (Exception e1) { // } } public void keyPressed(KeyEvent e) { int keyCode = e.getKeyCode(); switch (keyCode) { case KeyEvent.VK_ENTER: historyIndex = -1; addHistoryInput(getText()); return; case KeyEvent.VK_ESCAPE: historyIndex = -1; setText(""); return; } int historyCount = historyInputs.size(); if (historyCount == 0) { return; } switch (keyCode) { case KeyEvent.VK_UP: if (historyIndex < historyCount - 1) { historyIndex++; setText(historyInputs.get(historyIndex)); } break; case KeyEvent.VK_DOWN: if (historyIndex > 0) { historyIndex--; setText(historyInputs.get(historyIndex)); } else { historyIndex = -1; setText(""); } break; default: break; } } public void actionPerformed(final ActionEvent e) { SwingUtilities.invokeLater(new Runnable() { public void run() { EventDelegator.getInstance().delegateEvent(e); }}); } public void keyReleased(KeyEvent e) { } public void keyTyped(KeyEvent e) { } } private Handler handler = new Handler(); public TextField() { this(""); } public TextField(String text) { super(text); this.historyInputs = new ArrayList<String>(); setFont(UIUtils.TEXT_FONT); setForeground(Color.WHITE); setCaretColor(Color.WHITE); setBorder(null); setOpaque(false); //setBackground(Color.LIGHT_GRAY); // try { // setCursor(Cursor.getSystemCustomCursor("BLANK_CURSOR")); // } catch (HeadlessException e) { // e.printStackTrace(); // } catch (AWTException e) { // e.printStackTrace(); // } //this.addMouseListener(handler); //this.addKeyListener(handler); //this.addActionListener(handler); } @Override public String getUIClassID() { return uiClassID; } public boolean isHistory() { return history; } public void setHistory(boolean history) { this.history = history; } public void addHistoryInput(String text) { this.historyInputs.add(0, text); if (this.historyInputs.size() > maxHistoryCount) { this.historyInputs.remove(this.historyInputs.size() - 1); } } public int getMaxHistoryCount() { return maxHistoryCount; } public void setMaxHistoryCount(int maxHistoryCount) { this.maxHistoryCount = maxHistoryCount; } public List<String> getHistoryInputs() { return historyInputs; } @Override public void paintImmediately(int x, int y, int w, int h) { // super.paintImmediately(x, y, w, h); } @Override public void invalidate() { //super.invalidate(); } @Override public void validate() { //super.validate(); } @Override public void revalidate() { //super.revalidate(); } @Override public void updateUI() { super.updateUI(); } @Override public void update(Graphics g) { super.update(g); } }