현재 스윙 구성 요소를 구현하려고하는데, JLabel
을 상속받습니다. 스윙 구성 요소는 단순히 수직으로 배치 할 수있는 레이블을 나타내야합니다.스윙 JLabel을 회전하십시오.
public class RotatedLabel extends JLabel {
public enum Direction {
HORIZONTAL,
VERTICAL_UP,
VERTICAL_DOWN
}
private Direction direction;
나는 그냥 getPreferredSize()
의 결과를 바꿀 수있는 좋은 아이디어의 생각 :
이부터 나는에 그림을 오프로드하기 전에 간단하게 Graphics
개체를 변환 한 후
@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();
}
}
과 원본 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