Dla JLabel z ikoną, jeśli jesteś setHorizontalTextPosition(SwingConstants.LEADING)
, ikona jest malowana tuż po tekście, bez względu na to, jak szeroka jest etykieta.Jak usprawnić prawo ikony w JLabel?
Jest to szczególnie szkodliwe dla listy, ponieważ ikony byłyby wszędzie, w zależności od tego, jak długi jest tekst dla każdego elementu.
Śledziłem kod i wygląda na to, że w SwingUtilities#layoutCompoundLabelImpl
szerokość tekstu jest ustawiona po prostu na SwingUtilities2.stringWidth(c, fm, text)
, a ikona x jest ustawiona tak, aby śledzić tekst bez uwzględniania szerokości etykiety.
Oto najprostszy przypadek:
import java.awt.*;
import javax.swing.*;
public class TestJLabelIcon
{
public static void main(String args[])
{
EventQueue.invokeLater(new Runnable()
{
public void run()
{
JLabel c = new JLabel("abc");
c.setHorizontalTextPosition(SwingConstants.LEADING);
c.setHorizontalAlignment(SwingConstants.LEADING);
c.setIcon(UIManager.getIcon("FileChooser.detailsViewIcon"));
c.setBorder(BorderFactory.createLineBorder(Color.RED));
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().add(c);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
});
}
}
Widać, że etykieta zawsze wypełnia ramkę ale ikona pozostaje na miejscu. Otrzymasz problem z lustrem, jeśli ustawisz oba argumenty na TRAILING
.
Wiem, że mogę przesłonić interfejs użytkownika lub użyć JPanel itp. Zastanawiam się tylko, czy brakuje mi czegoś prostego w JLabel. Jeśli nie, wydaje się, że jest to błąd Javy.
FYI to jest jdk1.6.0_06 w systemie Windows XP.
Nop, muszę mieć tekst wyrównany do lewej i prawej ikona uzasadnione. –
Ah, rozumiem, co masz na myśli. – trashgod