Tôi hiện đang cố gắng triển khai thành phần Swing, kế thừa từ JLabel
chỉ đơn giản là đại diện cho nhãn có thể được định hướng theo chiều dọc.Xoay một JLabel Swing
Bắt đầu với điều này:
public class RotatedLabel extends JLabel {
public enum Direction {
HORIZONTAL,
VERTICAL_UP,
VERTICAL_DOWN
}
private Direction direction;
Tôi nghĩ nó là một ý tưởng tốt đẹp để chỉ làm thay đổi kết quả từ 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();
}
}
và sau đó chỉ cần chuyển đổi các đối tượng Graphics
trước khi tôi offload sơn đến gốc 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);
}
}
Dường như nó hoạt động — bằng cách nào đó - trong đó văn bản được hiển thị theo chiều dọc. Tuy nhiên, vị trí và kích thước bị tắt:
Thực ra, chiều rộng của nền (màu da cam trong trường hợp này) giống với chiều cao của xung quanh JFrame
đó là ... không hoàn toàn là những gì tôi có trong đầu.
Bất kỳ ý tưởng nào để giải quyết điều đó theo cách phù hợp? Đang ủy quyền hiển thị cho các lớp siêu đẳng thậm chí được khuyến khích?
bỏ qua "(" trong 'gr.translate0, getPreferredSize(). GetHeight());' – brownian