package com.hackerdude.swing.keymapper; /* ===================================================================== JKeyMap.java Created by Claude Duguay Copyright (c) 2000 ===================================================================== */ import java.awt.BorderLayout; import java.awt.Dimension; import java.awt.GridLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.BorderFactory; import javax.swing.InputMap; import javax.swing.JButton; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.KeyStroke; import javax.swing.event.ListSelectionEvent; import javax.swing.event.ListSelectionListener; public class JKeyMap extends JPanel implements ActionListener, ListSelectionListener { protected KeyMapTable keyMapTable; protected KeyMapTableModel model; protected KeyStrokeField keyStrokeField; protected JButton assign, remove; public JKeyMap() { model = new KeyMapTableModel(); //model.setModelInputMap(component.getInputMap()); JPanel table = new JPanel(new GridLayout()); table.add(new JScrollPane( keyMapTable = new KeyMapTable(model))); keyMapTable.getSelectionModel().addListSelectionListener(this); table.setPreferredSize(new Dimension(400, 150)); JPanel north = new JPanel(new GridLayout(2, 1, 4, 4)); north.add(assign = new JButton("Assign")); north.add(remove = new JButton("Remove")); assign.setDefaultCapable(false); remove.setDefaultCapable(false); JPanel buttons = new JPanel(new BorderLayout()); buttons.add(BorderLayout.NORTH, north); JPanel field = new JPanel(new BorderLayout(4, 4)); field.add(BorderLayout.WEST, new JLabel("New key assignment:")); field.add(BorderLayout.CENTER, keyStrokeField = new KeyStrokeField()); JPanel main = new JPanel(new BorderLayout(8, 8)); main.add(BorderLayout.CENTER, table); main.add(BorderLayout.SOUTH, field); setLayout(new BorderLayout(8, 8)); setBorder(BorderFactory.createEmptyBorder(4, 4, 4, 4)); add(BorderLayout.CENTER, main); add(BorderLayout.EAST, buttons); assign.addActionListener(this); remove.addActionListener(this); } public void setModelInputMap(InputMap inputMap) { model.setModelInputMap(inputMap); } public InputMap getModelInputMap() { return model.getModelInputMap(); } public void actionPerformed(ActionEvent event) { Object source = event.getSource(); int row = keyMapTable.getSelectedRow(); if (source == assign) { KeyStroke stroke = keyStrokeField.getKeyStroke(); model.setValueAt(stroke, row, 1); } if (source == remove) { model.setValueAt("", row, 1); keyStrokeField.setKeyStroke(null); } } public void valueChanged(ListSelectionEvent event) { int row = keyMapTable.getSelectedRow(); Object value = model.getValueAt(row, 1); if (value instanceof KeyStroke) { keyStrokeField.setKeyStroke((KeyStroke)value); } else { keyStrokeField.setKeyStroke(null); } } public KeyMapTableModel getModel() { return (KeyMapTableModel)keyMapTable.getModel(); } }