KeyListener without a text component
What do I need to change the SketchView class so that KeyListener
will respond to pressed key's. below is a Model/View Architecture of a GUI that I am using, but I cant get any key events. I dont want to use at text component.
// *************************************** START *
public class Sketcher {
public static void main(String[] args) {
theApp = new Sketcher();
SwingUtilities.invokeLater(
new Runnable() { // Anonymous Runnable class object
public void run() { // Run method executed in thread
theApp.creatGUI(); // Call static GUI creator
}
} );
}
// Method to create the application GUI
private void creatGUI() {
window = new SketchFrame("Sketcher", this); // Create the app window
Toolkit theKit = window.getToolkit(); // Get the window toolkit
Dimension wndSize = theKit.getScreenSize(); // Get screen size
// Set the position to screen center & size to half screen size
window.setBounds(wndSize.width/4, wndSize.height/4, // Position
wndSize.width/2, wndSize.height/2); // Size
window.addWindowListener(new WindowHandler());// Add window listener
sketch = new SketchModel(); // Create the model
view = new SketchView(this); // Create the view
sketch.addObserver(view); // Register view with the model
window.getContentPane().add(view, BorderLayout.CENTER);
window.setVisible(true);
}
// Return a reference to the application window
public SketchFrame getWindow() {
return window;
}
// Return a reference to the model
public SketchModel getModel() {
return sketch;
}
// Return a reference to the view
public SketchView getView() {
return view;
}
// Handler class for window events
class WindowHandler extends WindowAdapter {
// Handler for window closing event
public void windowClosing(WindowEvent e) {
}
}
private SketchModel sketch; // The data model for the sketch
private SketchView view; // The view of the sketch
private SketchFrame window; // The application window
private static Sketcher theApp; // The application object
}
// *************************************** END *
// *************************************** START *
class SketchView extends JComponent implements Observer {
public SketchView(Sketcher theApp) {
this.theApp = theApp;
}
// Method called by Observable object when it changes
public void update(Observable o, Object rectangle) {
// Code to respond to changes in the model...
}
private Sketcher theApp; // The application object
}
// *************************************** END *
// *************************************** START *
public class SketchModel extends Observable implements Iterable<Element>{
protected LinkedList<Element> elements = new LinkedList<Element>();
public boolean remove(Element element){
boolean removed = elements.remove(element);
if(removed){
setChanged();
notifyObservers(element.getBounds());
}
return removed;
}
public void add(Element element){
elements.add(element);
setChanged();
notifyObservers(element.getBounds());
}
public Iterator<Element> iterator(){
return elements.iterator();
}
}
// *************************************** END *
|