deleted example code
This commit is contained in:
parent
4cbd0e5316
commit
8f2d33c01c
1 changed files with 0 additions and 209 deletions
|
|
@ -1,209 +0,0 @@
|
||||||
/* From http://java.sun.com/docs/books/tutorial/index.html */
|
|
||||||
/*
|
|
||||||
* SelectionDemo.java is a 1.4 application that requires one other file:
|
|
||||||
* images/starfield.gif
|
|
||||||
*/
|
|
||||||
|
|
||||||
package album.editor;
|
|
||||||
|
|
||||||
import javax.swing.BoxLayout;
|
|
||||||
import javax.swing.ImageIcon;
|
|
||||||
import javax.swing.JFrame;
|
|
||||||
import javax.swing.JLabel;
|
|
||||||
import javax.swing.event.MouseInputAdapter;
|
|
||||||
import java.awt.*;
|
|
||||||
import java.awt.event.MouseEvent;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* This displays an image. When the user drags within the image, this program
|
|
||||||
* displays a rectangle and a string indicating the bounds of the rectangle.
|
|
||||||
*/
|
|
||||||
public class SelectionDemo {
|
|
||||||
JLabel label;
|
|
||||||
|
|
||||||
static String starFile = "/home/knut/src/album/photos/forkalsrud-ca-1951.jpg";
|
|
||||||
|
|
||||||
private void buildUI(Container container, ImageIcon image) {
|
|
||||||
container.setLayout(new BoxLayout(container, BoxLayout.PAGE_AXIS));
|
|
||||||
|
|
||||||
SelectionArea area = new SelectionArea(image, this);
|
|
||||||
container.add(area);
|
|
||||||
|
|
||||||
label = new JLabel("Drag within the image.");
|
|
||||||
label.setLabelFor(area);
|
|
||||||
container.add(label);
|
|
||||||
|
|
||||||
//Align the left edges of the components.
|
|
||||||
area.setAlignmentX(Component.LEFT_ALIGNMENT);
|
|
||||||
label.setAlignmentX(Component.LEFT_ALIGNMENT); //redundant
|
|
||||||
}
|
|
||||||
|
|
||||||
public void updateLabel(Rectangle rect) {
|
|
||||||
int width = rect.width;
|
|
||||||
int height = rect.height;
|
|
||||||
|
|
||||||
//Make the coordinates look OK if a dimension is 0.
|
|
||||||
if (width == 0) {
|
|
||||||
width = 1;
|
|
||||||
}
|
|
||||||
if (height == 0) {
|
|
||||||
height = 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
label.setText("Rectangle goes from (" + rect.x + ", " + rect.y
|
|
||||||
+ ") to (" + (rect.x + width - 1) + ", "
|
|
||||||
+ (rect.y + height - 1) + ").");
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Returns an ImageIcon, or null if the path was invalid. */
|
|
||||||
protected static ImageIcon createImageIcon(String path) {
|
|
||||||
return new ImageIcon(path, "description");
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Create the GUI and show it. For thread safety, this method should be
|
|
||||||
* invoked from the event-dispatching thread.
|
|
||||||
*/
|
|
||||||
private static void createAndShowGUI() {
|
|
||||||
//Make sure we have nice window decorations.
|
|
||||||
JFrame.setDefaultLookAndFeelDecorated(true);
|
|
||||||
|
|
||||||
//Create and set up the window.
|
|
||||||
JFrame frame = new JFrame("SelectionDemo");
|
|
||||||
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
|
|
||||||
|
|
||||||
//Set up the content pane.
|
|
||||||
SelectionDemo controller = new SelectionDemo();
|
|
||||||
controller.buildUI(frame.getContentPane(), createImageIcon(starFile));
|
|
||||||
|
|
||||||
//Display the window.
|
|
||||||
frame.pack();
|
|
||||||
frame.setVisible(true);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void main(String[] args) {
|
|
||||||
//Schedule a job for the event-dispatching thread:
|
|
||||||
//creating and showing this application's GUI.
|
|
||||||
javax.swing.SwingUtilities.invokeLater(new Runnable() {
|
|
||||||
public void run() {
|
|
||||||
createAndShowGUI();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
private class SelectionArea extends JLabel {
|
|
||||||
Rectangle currentRect = null;
|
|
||||||
|
|
||||||
Rectangle rectToDraw = null;
|
|
||||||
|
|
||||||
Rectangle previousRectDrawn = new Rectangle();
|
|
||||||
|
|
||||||
SelectionDemo controller;
|
|
||||||
|
|
||||||
public SelectionArea(ImageIcon image, SelectionDemo controller) {
|
|
||||||
super(image); //This component displays an image.
|
|
||||||
this.controller = controller;
|
|
||||||
setOpaque(true);
|
|
||||||
setMinimumSize(new Dimension(10, 10)); //don't hog space
|
|
||||||
|
|
||||||
MyListener myListener = new MyListener();
|
|
||||||
addMouseListener(myListener);
|
|
||||||
addMouseMotionListener(myListener);
|
|
||||||
}
|
|
||||||
|
|
||||||
private class MyListener extends MouseInputAdapter {
|
|
||||||
public void mousePressed(MouseEvent e) {
|
|
||||||
int x = e.getX();
|
|
||||||
int y = e.getY();
|
|
||||||
currentRect = new Rectangle(x, y, 0, 0);
|
|
||||||
updateDrawableRect(getWidth(), getHeight());
|
|
||||||
repaint();
|
|
||||||
}
|
|
||||||
|
|
||||||
public void mouseDragged(MouseEvent e) {
|
|
||||||
updateSize(e);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void mouseReleased(MouseEvent e) {
|
|
||||||
updateSize(e);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Update the size of the current rectangle and call repaint.
|
|
||||||
* Because currentRect always has the same origin, translate it if
|
|
||||||
* the width or height is negative.
|
|
||||||
*
|
|
||||||
* For efficiency (though that isn't an issue for this program),
|
|
||||||
* specify the painting region using arguments to the repaint()
|
|
||||||
* call.
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
void updateSize(MouseEvent e) {
|
|
||||||
int x = e.getX();
|
|
||||||
int y = e.getY();
|
|
||||||
currentRect.setSize(x - currentRect.x, y - currentRect.y);
|
|
||||||
updateDrawableRect(getWidth(), getHeight());
|
|
||||||
Rectangle totalRepaint = rectToDraw.union(previousRectDrawn);
|
|
||||||
repaint(totalRepaint.x, totalRepaint.y, totalRepaint.width,
|
|
||||||
totalRepaint.height);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
protected void paintComponent(Graphics g) {
|
|
||||||
super.paintComponent(g); //paints the background and image
|
|
||||||
|
|
||||||
//If currentRect exists, paint a box on top.
|
|
||||||
if (currentRect != null) {
|
|
||||||
//Draw a rectangle on top of the image.
|
|
||||||
g.setXORMode(Color.white); //Color of line varies
|
|
||||||
//depending on image colors
|
|
||||||
g.drawRect(rectToDraw.x, rectToDraw.y, rectToDraw.width - 1,
|
|
||||||
rectToDraw.height - 1);
|
|
||||||
|
|
||||||
controller.updateLabel(rectToDraw);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void updateDrawableRect(int compWidth, int compHeight) {
|
|
||||||
int x = currentRect.x;
|
|
||||||
int y = currentRect.y;
|
|
||||||
int width = currentRect.width;
|
|
||||||
int height = currentRect.height;
|
|
||||||
|
|
||||||
//Make the width and height positive, if necessary.
|
|
||||||
if (width < 0) {
|
|
||||||
width = 0 - width;
|
|
||||||
x = x - width + 1;
|
|
||||||
if (x < 0) {
|
|
||||||
width += x;
|
|
||||||
x = 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (height < 0) {
|
|
||||||
height = 0 - height;
|
|
||||||
y = y - height + 1;
|
|
||||||
if (y < 0) {
|
|
||||||
height += y;
|
|
||||||
y = 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//The rectangle shouldn't extend past the drawing area.
|
|
||||||
if ((x + width) > compWidth) {
|
|
||||||
width = compWidth - x;
|
|
||||||
}
|
|
||||||
if ((y + height) > compHeight) {
|
|
||||||
height = compHeight - y;
|
|
||||||
}
|
|
||||||
|
|
||||||
//Update rectToDraw after saving old value.
|
|
||||||
if (rectToDraw != null) {
|
|
||||||
previousRectDrawn.setBounds(rectToDraw.x, rectToDraw.y,
|
|
||||||
rectToDraw.width, rectToDraw.height);
|
|
||||||
rectToDraw.setBounds(x, y, width, height);
|
|
||||||
} else {
|
|
||||||
rectToDraw = new Rectangle(x, y, width, height);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Loading…
Add table
Reference in a new issue