私は現在、Swing コンポーネントを実装しようとしています。継承するコンポーネントは、JLabel
垂直方向に配置できるラベルを単純に表す必要があります。
これから始めます:
public class RotatedLabel extends JLabel {
public enum Direction {
HORIZONTAL,
VERTICAL_UP,
VERTICAL_DOWN
}
private Direction direction;
からの結果を変更するのは良い考えだと思いましたgetPreferredSize()
:
@Override
public Dimension getPreferredSize() {
// swap size for vertical alignments
switch (getDirection()) {
case VERTICAL_UP:
case VERTICAL_DOWN:
return new Dimension(super.getPreferredSize().height, super
.getPreferredSize().width);
default:
return super.getPreferredSize();
}
}
Graphics
次に、ペイントを元のオブジェクトにオフロードする前に、オブジェクトを変換するだけですJLabel
。
@Override
protected void paintComponent(Graphics g) {
Graphics2D gr = (Graphics2D) g.create();
switch (getDirection()) {
case VERTICAL_UP:
gr.translate(0, getPreferredSize().getHeight());
gr.transform(AffineTransform.getQuadrantRotateInstance(-1));
break;
case VERTICAL_DOWN:
// TODO
break;
default:
}
super.paintComponent(gr);
}
どういうわけか、テキストが縦に表示されるようになったようです。ただし、配置とサイズはオフです。
実際、背景の幅 (この場合はオレンジ色) は、周囲の高さと同じJFrame
です... これは、私が考えていたものではありません。
それを適切な方法で解決する方法はありますか?レンダリングをスーパークラスに委任することは奨励されていますか?