annotate examples/gui/swing/BLDComponent.java @ 2:74cc9e431818

Revert change to MidiSynth
author samer
date Fri, 05 Apr 2019 16:43:56 +0100
parents 5df24c91468d
children
rev   line source
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 }