import java.awt.*;
import javax.swing.*;
import java.awt.Toolkit;
import java.awt.BorderLayout;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
public class LeBeeper extends JPanel
implements ActionListener {
JButton button;
public LeBeeper() {
super(new BorderLayout());
button = new JButton("Click Me");
button.setPreferredSize(new Dimension(200, 80));
add(button, BorderLayout.CENTER);
button.addActionListener(this);
}
public void actionPerformed(ActionEvent e) {
Toolkit.getDefaultToolkit().beep();
}
private static void createAndShowGUI() {
JFrame.setDefaultLookAndFeelDecorated(true);
JFrame frame = new JFrame("Beeper");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//Create and set up the content pane.
JComponent newContentPane = new LeBeeper();
newContentPane.setOpaque(true); //content panes must be opaque
frame.setContentPane(newContentPane);
frame.pack();
frame.setVisible(true);
}
public static void main(String[] args) {
javax.swing.SwingUtilities.invokeLater(new Runnable() {
public void run() {
createAndShowGUI();
}
});
}
}
import javax.swing.*;
import java.awt.*;
public class Layingout {
final static String LOOKANDFEEL = null; // ... or: "Metal", "System", "Motif", "GTK+"
public Component createComponents() {
JButton button1 = new JButton("ONE");
JButton button2 = new JButton("TWO");
JButton button3 = new JButton("THREE");
JButton button4 = new JButton("FOUR");
JButton button5 = new JButton("FIVE");
JPanel pane = new JPanel(new GridLayout(2,1));
pane.add(button1);
pane.add(button2);
pane.add(button3);
pane.add(button4);
pane.add(button5);
return pane;
}
private static void createAndShowGUI() {
JFrame.setDefaultLookAndFeelDecorated(true); // Make it so!
JFrame frame = new JFrame("Button Showing"); // build frame with exit option!
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Layingout app = new Layingout();
Component contents = app.createComponents();
frame.getContentPane().add(contents, BorderLayout.CENTER);
frame.pack();
frame.setVisible(true);
}
public static void main(String[] args) {
javax.swing.SwingUtilities.invokeLater(new Runnable() {
public void run() { createAndShowGUI(); }
} ); // end of 'invokeLater'
} // end of Main
}
import javax.swing.*;
import java.awt.*;
public class NowDrawStuff { // save as NowDrawStuff.java
private void buildUI(Container container) {
container.setLayout( new BoxLayout(container, BoxLayout.PAGE_AXIS) );
CoordinateArea coordinateArea = new CoordinateArea(this); // see below
container.add(coordinateArea);
}
private static void createAndShowGUI() {
JFrame.setDefaultLookAndFeelDecorated(true);
JFrame frame = new JFrame("DrawThingsDemo");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
NowDrawStuff controller = new NowDrawStuff();
controller.buildUI(frame.getContentPane());
frame.pack();
frame.setVisible(true);
}
public static void main(String[] args) {
javax.swing.SwingUtilities.invokeLater(new Runnable()
{ public void run() { createAndShowGUI(); } }
); // end of invokeLater
} // end of main
public static class CoordinateArea extends JComponent {
//Point point = null;
NowDrawStuff controller;
Dimension preferredSize = new Dimension(400,575); // choose size!!
Color gridColor;
public CoordinateArea(NowDrawStuff controller) {
this.controller = controller;
//Add border of 10 pixels at L and bottom, and 4 pixels at the top and R.
setBorder(BorderFactory.createMatteBorder(4,10,10,4,Color.RED));
setBackground(Color.WHITE);
setOpaque(true);
} // end of constructor
public Dimension getPreferredSize() {
return preferredSize;
}
protected void paintComponent(Graphics g) {
if (isOpaque()) { g.setColor(getBackground()); //Paint bg if we're opaque.
g.fillRect(0, 0, getWidth(), getHeight());
}
g.setColor(Color.ORANGE); //Paint colour , even ...drawGrid(g, 20); below
g.drawLine(78,200,100,38);
g.setColor(getForeground());
g.fillRect(13, 23, 67, 107);
int [] xcoords = new int[6]; int [] ycoords = new int[6];
for (int i=0; i<6; i++) { xcoords[i] = 50 * i + 100;
ycoords[i] = 10 * i * i + 200; }
g.setColor(Color.MAGENTA);
g.drawPolyline( xcoords, ycoords, 6);
} // end of paintComponent
//Draws a 20x20 grid using the current color.
private void drawGrid(Graphics g, int gridSpace) {
Insets insets = getInsets();
int firstX = insets.left;
int firstY = insets.top;
int lastX = getWidth() - insets.right;
int lastY = getHeight() - insets.bottom;
int x = firstX; //Draw vertical lines.
while (x < lastX) { g.drawLine(x, firstY, x, lastY);
x += gridSpace;
}
int y = firstY; //Draw horizontal lines.
while (y < lastY) { g.drawLine(firstX, y, lastX, y);
y += gridSpace;
}
} // end of drawGrid
} // end of CoordinateArea class
}
import javax.swing.*;
import java.awt.*;
import java.awt.event.MouseEvent;
import javax.swing.event.MouseInputListener;
/*
* This displays a framed area. As the user moves the cursor
* over the area, a label displays the cursor's location. When
* the user clicks, the area displays a 7x7 dot at the click
* location.
*/
public class QCoordinatesDemo {
private JLabel label;
private Point clickPoint, cursorPoint;
private void buildUI(Container container) {
container.setLayout( new BoxLayout(container, BoxLayout.PAGE_AXIS) );
CoordinateArea coordinateArea = new CoordinateArea(this); // see below
container.add(coordinateArea);
label = new JLabel();
resetLabel(); // see below
container.add(label);
//Align the left edges of the components.
coordinateArea.setAlignmentX(Component.LEFT_ALIGNMENT);
label.setAlignmentX(Component.LEFT_ALIGNMENT); //redundant
}
public void updateCursorLocation(int x, int y) {
if (x < 0 || y < 0) {
cursorPoint = null;
updateLabel(); // see below
return;
}
if (cursorPoint == null) {
cursorPoint = new Point();
}
cursorPoint.x = x;
cursorPoint.y = y;
updateLabel(); // see below
}
public void updateClickPoint(Point p) {
clickPoint = p;
updateLabel(); // see below
}
public void resetLabel() {
cursorPoint = null;
updateLabel(); // see below
}
protected void updateLabel() {
String text = "";
if ((clickPoint == null) && (cursorPoint == null))
text = "Click or move the cursor within the framed area.";
else {
if (clickPoint != null) {
text += "The last click was at ("
+ clickPoint.x + ", " + clickPoint.y + "). ";
}
if (cursorPoint != null) {
text += "The cursor is at ("
+ cursorPoint.x + ", " + cursorPoint.y + "). ";
}
}
label.setText(text);
}
private static void createAndShowGUI() {
JFrame.setDefaultLookAndFeelDecorated(true);
JFrame frame = new JFrame("CoordinatesDemo");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
QCoordinatesDemo controller = new QCoordinatesDemo();
controller.buildUI(frame.getContentPane());
frame.pack();
frame.setVisible(true);
}
public static void main(String[] args) {
javax.swing.SwingUtilities.invokeLater(new Runnable()
{ public void run() { createAndShowGUI(); } }
); // end of invokeLater
} // end of main
public static class CoordinateArea extends JComponent
implements MouseInputListener {
Point point = null;
QCoordinatesDemo controller;
Dimension preferredSize = new Dimension(400,75);
Color gridColor;
public CoordinateArea(QCoordinatesDemo controller) {
this.controller = controller;
//Add a border of 5 pixels at the left and bottom,
//and 1 pixel at the top and right.
setBorder(BorderFactory.createMatteBorder(1,5,5,1,Color.RED));
addMouseListener(this);
addMouseMotionListener(this);
setBackground(Color.WHITE);
setOpaque(true);
} // end of constructor
public Dimension getPreferredSize() {
return preferredSize;
}
protected void paintComponent(Graphics g) {
if (isOpaque()) { g.setColor(getBackground()); //Paint bg if we're opaque.
g.fillRect(0, 0, getWidth(), getHeight());
}
g.setColor(Color.GRAY); //Paint 20x20 grid.
drawGrid(g, 20); // defined below
//If user has chosen a point, paint a small 'dot' on top.
if (point != null) { g.setColor(getForeground());
g.fillRect(point.x - 3, point.y - 3, 7, 7);
}
} // end of paintComponent
//Draws a 20x20 grid using the current color.
private void drawGrid(Graphics g, int gridSpace) {
Insets insets = getInsets();
int firstX = insets.left;
int firstY = insets.top;
int lastX = getWidth() - insets.right;
int lastY = getHeight() - insets.bottom;
int x = firstX; //Draw vertical lines.
while (x < lastX) { g.drawLine(x, firstY, x, lastY);
x += gridSpace;
}
int y = firstY; //Draw horizontal lines.
while (y < lastY) { g.drawLine(firstX, y, lastX, y);
y += gridSpace;
}
} // end of drawGrid
//Methods required by the MouseInputListener interface.
public void mouseClicked(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;
}
controller.updateClickPoint(point);
repaint();
}
public void mouseMoved(MouseEvent e) {
controller.updateCursorLocation(e.getX(), e.getY());
}
public void mouseExited(MouseEvent e) {
controller.resetLabel();
}
public void mouseReleased(MouseEvent e) { }
public void mouseEntered(MouseEvent e) { }
public void mousePressed(MouseEvent e) { }
public void mouseDragged(MouseEvent e) { }
} // end of CoordinateArea class
}
// SelectionDemo.java requires one other file: images/starfield.gif
import javax.swing.*;
import javax.swing.event.MouseInputAdapter; // so only need to override methods!
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 { // contains main and various static methods ... also
JLabel label; // ... has SelectionArea as a private inner class
static String filePrefix = "../uiswing/14painting/example-1dot4/";
static String starFile = filePrefix + "images/starfield.gif";
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) {
java.net.URL imgURL = SelectionDemo.class.getResource(path);
if (imgURL != null) return new ImageIcon(imgURL);
else { System.err.println("Couldn't find file: " + path);
return null;
}
}
private static void createAndShowGUI() {
JFrame.setDefaultLookAndFeelDecorated(true);
JFrame frame = new JFrame("SelectionDemo");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
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(); } }
); // end of invokeLater
} // end of main //////////////////////////////////////////////////////
private class SelectionArea extends JLabel {
Rectangle currentRect = null;
Rectangle rectToDraw = null;
Rectangle previousRectDrawn = new Rectangle();
SelectionDemo controller;
public SelectionArea(ImageIcon image, SelectionDemo controller) { // constructor
super(image); //This component displays an image using the JLabel constructor
this.controller = controller;
setOpaque(true);
setMinimumSize(new Dimension(10,10)); //don't hog space
MyListener myListener = new MyListener(); // MyListener class is below
addMouseListener(myListener);
addMouseMotionListener(myListener);
} // end of constructor
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()); // defined below
repaint(); // this is what shows us the rectangle via JLabel's paint
} // end of mousePressed
public void mouseDragged(MouseEvent e) { updateSize(e); } // defined below
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, 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); // uses JLabel's paint
} // end of updateSize
} // end of MyListener class
protected void paintComponent(Graphics g) {
super.paintComponent(g); //paints the background and image via JLabel's paintC
// ... which in turn came from JComponent !!
//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 dep on image colors
g.drawRect(rectToDraw.x, rectToDraw.y,
rectToDraw.width - 1, rectToDraw.height - 1);
controller.updateLabel(rectToDraw); // since this inherits from JLabel
}
}
private void updateDrawableRect(int compWidth, int compHeight) {
int x = currentRect.x; // first get current data
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; // gets abs value of width if width was neg
x = x - width + 1; // ... then moves x coord L by width
if (x < 0) { width += x; x = 0; } // slides everything R if too far L
}
if (height < 0) { // analogous to the width magic above
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);
} // end of updateDrawableRect
} // end of SelectionArea class
}