鍵盤を描く
public void paint(Graphics g) { super.paint(g); int w = getWidth() / 7; for(int i=0; i<7; i++) { g.drawLine(w * i, 0, w * i, getHeight()); if(BLACK_KEY[i]) g.fillRect(w * i + w / 2, 0, w, getHeight() / 2); } } private final boolean[] BLACK_KEY = {true, true, false, true, true, true, false};
これはよくない。
場所 | 長さ(cm) |
---|---|
白鍵 | 2.2 |
黒鍵 | 1.5 |
隙間 | 0.1 |
ミとファの隙間 | 0.2 |
ドとド#,レ#とミの間 | 1.3 |
ファ#とソ,ソ#とラの間 | 1.1 |
それ以外の間 | 1.2 |
わりと数字がそろっていないものの、白鍵を7分割、黒鍵を12分割で近似できそう。
public void paint(Graphics g) { super.paint(g); int w = getWidth() / 7; for(int i=0; i<7; i++) g.drawLine(w * i, 0, w * i, getHeight()); w = getWidth() / 12; for(int i=0; i<12; i++) { if(BLACK_KEY[i]) g.fillRect(w * i, 0, w, getHeight() / 2); } } private final boolean[] BLACK_KEY = {false, true, false, true, false, false, true, false, true, false, true, false};
微妙。ミまでとファからで分けて考えるのがよさそうだけどあんまりルール増やしすぎると押したとこ光らすとかが大変。