現在、スウィングコンポーネントを実装しようとしています。これは、JLabel
から継承しています。このスウィングコンポーネントは、単に垂直方向に向けることができるラベルを表す必要があります。この以降でスウィングJLabelを回転する
:
@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
オブジェクトを変換する:
public class RotatedLabel extends JLabel {
public enum Direction {
HORIZONTAL,
VERTICAL_UP,
VERTICAL_DOWN
}
private Direction direction;
は、私はそれだけでgetPreferredSize()
からの結果を変えるのはいいアイデアかもだと思いました元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);
}
}
これはうまくいくように見えます。何とかテキストが垂直方向に表示されるようになりました。しかし、配置とサイズはオフになっています:
実際には、背景の幅(この場合はオレンジ)は周囲の高さと同じです。これは私が気にしていたものではありません。
どのように適切な方法でそれを解決するためのアイデアですか?スーパークラスへのレンダリングを委任することさえ奨励されていますか?
"(" gr.translate0、getPreferredSize()。getHeight()); ' – brownian