samer@1
|
1 import java.awt.*;
|
samer@1
|
2 import java.awt.event.*;
|
samer@1
|
3 import javax.swing.*;
|
samer@1
|
4
|
samer@1
|
5 /** A rectangle that has a fixed size. */
|
samer@1
|
6 class BLDComponent extends JComponent {
|
samer@1
|
7 private Color normalHue;
|
samer@1
|
8 private final Dimension preferredSize;
|
samer@1
|
9 private String name;
|
samer@1
|
10 private boolean restrictMaximumSize;
|
samer@1
|
11 private boolean printSize;
|
samer@1
|
12
|
samer@1
|
13 public BLDComponent(float alignmentX, float hue,
|
samer@1
|
14 int shortSideSize,
|
samer@1
|
15 boolean restrictSize,
|
samer@1
|
16 boolean printSize,
|
samer@1
|
17 String name) {
|
samer@1
|
18 this.name = name;
|
samer@1
|
19 this.restrictMaximumSize = restrictSize;
|
samer@1
|
20 this.printSize = printSize;
|
samer@1
|
21 setAlignmentX(alignmentX);
|
samer@1
|
22 normalHue = Color.getHSBColor(hue, 0.4f, 0.85f);
|
samer@1
|
23 preferredSize = new Dimension(shortSideSize*2, shortSideSize);
|
samer@1
|
24
|
samer@1
|
25 MouseListener l = new MouseAdapter() {
|
samer@1
|
26 public void mousePressed(MouseEvent e) {
|
samer@1
|
27 int width = getWidth();
|
samer@1
|
28 float alignment = (float)(e.getX())
|
samer@1
|
29 / (float)width;
|
samer@1
|
30
|
samer@1
|
31 // Round to the nearest 1/10th.
|
samer@1
|
32 int tmp = Math.round(alignment * 10.0f);
|
samer@1
|
33 alignment = (float)tmp / 10.0f;
|
samer@1
|
34
|
samer@1
|
35 setAlignmentX(alignment);
|
samer@1
|
36 revalidate(); // this GUI needs relayout
|
samer@1
|
37 repaint();
|
samer@1
|
38 }
|
samer@1
|
39 };
|
samer@1
|
40 addMouseListener(l);
|
samer@1
|
41 }
|
samer@1
|
42
|
samer@1
|
43 /**
|
samer@1
|
44 * Our BLDComponents are completely opaque, so we override
|
samer@1
|
45 * this method to return true. This lets the painting
|
samer@1
|
46 * system know that it doesn't need to paint any covered
|
samer@1
|
47 * part of the components underneath this component. The
|
samer@1
|
48 * end result is possibly improved painting performance.
|
samer@1
|
49 */
|
samer@1
|
50 public boolean isOpaque() {
|
samer@1
|
51 return true;
|
samer@1
|
52 }
|
samer@1
|
53
|
samer@1
|
54 public void paint(Graphics g) {
|
samer@1
|
55 int width = getWidth();
|
samer@1
|
56 int height = getHeight();
|
samer@1
|
57 float alignmentX = getAlignmentX();
|
samer@1
|
58
|
samer@1
|
59 g.setColor(normalHue);
|
samer@1
|
60 g.fill3DRect(0, 0, width, height, true);
|
samer@1
|
61
|
samer@1
|
62 /* Draw a vertical white line at the alignment point.*/
|
samer@1
|
63 // XXX: This code is probably not the best.
|
samer@1
|
64 g.setColor(Color.white);
|
samer@1
|
65 int x = (int)(alignmentX * (float)width) - 1;
|
samer@1
|
66 g.drawLine(x, 0, x, height - 1);
|
samer@1
|
67
|
samer@1
|
68 /* Say what the alignment point is. */
|
samer@1
|
69 g.setColor(Color.black);
|
samer@1
|
70 g.drawString(Float.toString(alignmentX), 3, height - 3);
|
samer@1
|
71
|
samer@1
|
72 if (printSize) {
|
samer@1
|
73 System.out.println("BLDComponent " + name + ": size is "
|
samer@1
|
74 + width + "x" + height
|
samer@1
|
75 + "; preferred size is "
|
samer@1
|
76 + getPreferredSize().width + "x"
|
samer@1
|
77 + getPreferredSize().height);
|
samer@1
|
78 }
|
samer@1
|
79 }
|
samer@1
|
80
|
samer@1
|
81 public Dimension getPreferredSize() {
|
samer@1
|
82 return preferredSize;
|
samer@1
|
83 }
|
samer@1
|
84
|
samer@1
|
85 public Dimension getMinimumSize() {
|
samer@1
|
86 return preferredSize;
|
samer@1
|
87 }
|
samer@1
|
88
|
samer@1
|
89 public Dimension getMaximumSize() {
|
samer@1
|
90 if (restrictMaximumSize) {
|
samer@1
|
91 return preferredSize;
|
samer@1
|
92 } else {
|
samer@1
|
93 return super.getMaximumSize();
|
samer@1
|
94 }
|
samer@1
|
95 }
|
samer@1
|
96
|
samer@1
|
97 public void setSizeRestriction(boolean restrictSize) {
|
samer@1
|
98 restrictMaximumSize = restrictSize;
|
samer@1
|
99 }
|
samer@1
|
100
|
samer@1
|
101 }
|