Fabio Hellmann
Erfahrenes Mitglied
Hi,
also ich hab damit auch gerade mal ein wenig herumexperimentiert. Ich bin soweit, dass sich das JLabel rotiert, allerdings ist nur der Teil sichtbar, der über setBounds(...) angegeben wurde. Eine Lösung für dieses Problem find ich momentan aber auch nicht.
Vielleicht kannst du den Ansatz aber weiterverfolgen und findest noch eine Lösung für dieses Problem.
Gruß
Fabio
also ich hab damit auch gerade mal ein wenig herumexperimentiert. Ich bin soweit, dass sich das JLabel rotiert, allerdings ist nur der Teil sichtbar, der über setBounds(...) angegeben wurde. Eine Lösung für dieses Problem find ich momentan aber auch nicht.
Java:
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.util.Timer;
import java.util.TimerTask;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.border.EtchedBorder;
/**
* @author FabioH
*/
public class JLabelRotator extends JFrame
{
/**
*
*/
public JLabelRotator() {
super("JLabelRotator");
setDefaultCloseOperation(EXIT_ON_CLOSE);
setSize(200, 200);
final JPanel p = new JPanel();
p.setLayout(null);
add(p);
final JRotationLabel l = new JRotationLabel("Text");
l.setBounds(50, 75, 50, 20);
l.setRotationLocation(25, 10);
l.setBorder(new EtchedBorder(EtchedBorder.RAISED));
p.add(l);
setVisible(true);
new Timer().scheduleAtFixedRate(new TimerTask()
{
private int currAngle = 0;
@Override
public void run() {
if(currAngle == 360) {
currAngle = 0;
}
l.setAngle(currAngle);
currAngle++;
p.repaint();
}
}, 0, 20);
}
public static void main(final String[] args) {
new JLabelRotator();
}
private final class JRotationLabel extends JLabel
{
private double rotationPointX = 0;
private double rotationPointY = 0;
private double angle = 0;
/**
* @param text
*/
public JRotationLabel(final String text) {
super(text);
}
/**
* @param text
* @param horizontalalign
*/
public JRotationLabel(final String text, final int horizontalalign) {
super(text, horizontalalign);
}
/*
* (non-Javadoc)
*
* @see javax.swing.JComponent#paintComponent(java.awt.Graphics)
*/
@Override
protected void paintComponent(final Graphics g) {
// ---
// Rotate
final Graphics2D g2d = (Graphics2D) g;
g2d.rotate(Math.toRadians(angle), rotationPointX, rotationPointY);
super.paintComponent(g);
}
/**
* @param angle
* the angle to set
*/
public void setAngle(final double angle) {
this.angle = angle;
}
/**
* @return the angle
*/
public double getAngle() {
return angle;
}
/**
* @param x
* @param y
*/
public void setRotationLocation(final double x, final double y) {
rotationPointX = x;
rotationPointY = y;
}
}
}
Vielleicht kannst du den Ansatz aber weiterverfolgen und findest noch eine Lösung für dieses Problem.
Gruß
Fabio