Несколько комментариев:
a) вам не нужно использовать CompoundIcon.Код, который вы опубликовали, использует пустую строку для TextIcon.
b) вам не следует вкладывать RotatedIcons.Если вы вложите, фактическое вращение будет суммой всех вращений, поэтому вращение не будет последовательным.Если вы вкладываете 3 иконки с углами 1, 2, 3, то на самом деле вы поворачиваете всего на 6 градусов, а не 3. Сейчас ваш код выглядит так:
RotatedIcon ri = new RotatedIcon(ri, angle);
Вместо этого вы должны использовать:
RotatedIcon ri = new RotatedIcon(ri.getIcon(), angle);
Вот реструктурированная версия вашего кода, который, я думаю, делает то, что вы хотите:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
public class IconSSCCE extends JPanel implements ActionListener
{
JLabel label = new JLabel();
TextIcon text;
ImageIcon image;
Float angle = 0.0f;
public IconSSCCE()
{
setLayout( new BorderLayout() );
text = new TextIcon(label, "Some Text", TextIcon.Layout.HORIZONTAL);
// text = new TextIcon(label, "", TextIcon.Layout.HORIZONTAL);
image = new ImageIcon("dukeWaveRed.gif");
CompoundIcon ci = new CompoundIcon(CompoundIcon.Axis.X_AXIS, image, text);
label.setIcon( ci );
add(label, BorderLayout.NORTH);
JButton rotate = new JButton("Rotate");
add(rotate, BorderLayout.SOUTH);
rotate.addActionListener( new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
new Timer(50, IconSSCCE.this).start();
}
});
}
public void actionPerformed(ActionEvent e)
{
angle++;
RotatedIcon ri = new RotatedIcon(image, angle);
CompoundIcon ci = new CompoundIcon(ri, text);
label.setIcon( ci );
}
private static void createAndShowUI()
{
JFrame frame = new JFrame("IconSSCCE");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add( new IconSSCCE() );
frame.pack();
frame.setLocationRelativeTo( null );
frame.setVisible( true );
}
public static void main(String[] args)
{
EventQueue.invokeLater(new Runnable()
{
public void run()
{
createAndShowUI();
}
});
}
}