/*
* Swing version.
*/
import javax.swing.*;
import javax.swing.border.Border;
import javax.swing.event.*;
import java.awt.*;
import java.awt.event.*;
/*
* This displays a framed area. When the user clicks within
* the area, this program displays a dot and a string indicating
* the coordinates where the click occurred.
*/
public class CoordinatesDemo extends JApplet {
JLabel label;
//Called only when this is run as an applet.
public void init() {
buildUI(getContentPane());
}
void buildUI(Container container) {
container.setLayout(new BoxLayout(container,
BoxLayout.Y_AXIS));
CoordinateArea coordinateArea = new CoordinateArea(this);
container.add(coordinateArea);
label = new JLabel("Click within the framed area.");
container.add(label);
//Align the left edges of the components.
coordinateArea.setAlignmentX(LEFT_ALIGNMENT);
label.setAlignmentX(LEFT_ALIGNMENT); //redundant
}
public void updateLabel(Point point) {
label.setText("Click occurred at coordinate ("
+ point.x + ", " + point.y + ").");
}
public static void main(String[] args) {
JFrame f = new JFrame("CoordinatesDemo");
f.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
CoordinatesDemo controller = new CoordinatesDemo();
controller.buildUI(f.getContentPane());
f.pack();
f.setVisible(true);
}
}
class CoordinateArea extends JPanel {
Point point = null;
CoordinatesDemo controller;
Dimension preferredSize = new Dimension(400,150);
public CoordinateArea(CoordinatesDemo controller) {
this.controller = controller;
Border raisedBevel = BorderFactory.createRaisedBevelBorder();
Border loweredBevel = BorderFactory.createLoweredBevelBorder();
Border compound = BorderFactory.createCompoundBorder
(raisedBevel, loweredBevel);
setBorder(compound);
addMouseListener(new MouseAdapter() {
public void mousePressed(MouseEvent e) {
int x = e.getX();
int y = e.getY();
if (point == null) {
point = new Point(x, y);
} else {
point.x = x;
point.y = y;
}
repaint();
}
});
}
public Dimension getPreferredSize() {
return preferredSize;
}
public void paintComponent(Graphics g) {
super.paintComponent(g); //paint background
//If user has chosen a point, paint a tiny rectangle on top.
if (point != null) {
controller.updateLabel(point);
g.fillRect(point.x - 1, point.y - 1, 2, 2);
}
}
}
|