घुमाएं मैं वर्तमान में 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
की ऊंचाई के समान है जो ... मेरे मन में काफी कुछ नहीं था।
कोई विचार उचित तरीके से इसे कैसे हल करें? क्या superclasses को प्रतिपादन प्रतिनिधि भी प्रोत्साहित किया जाता है?
मिस्ड "(" gr.translate0 में, getPreferredSize()। GetHeight()); ' – brownian