Đối với biểu tượng JLabel có biểu tượng, nếu bạn setHorizontalTextPosition(SwingConstants.LEADING)
, biểu tượng sẽ được vẽ ngay sau văn bản, cho dù nhãn có rộng đến mức nào không.Làm cách nào để căn chỉnh biểu tượng trong nhãn JLabel?
Điều này đặc biệt xấu đối với danh sách, vì các biểu tượng sẽ ở khắp mọi nơi tùy thuộc vào thời lượng văn bản cho mỗi mục.
Tôi đã truy tìm mã và có vẻ như trong SwingUtilities#layoutCompoundLabelImpl
, chiều rộng văn bản chỉ được đặt thành SwingUtilities2.stringWidth(c, fm, text)
và biểu tượng x được đặt để theo dõi văn bản mà không xem xét chiều rộng nhãn.
Đây là trường hợp đơn giản:
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);
}
});
}
}
Bạn có thể thấy nhãn mà luôn lấp đầy khung nhưng biểu tượng vẫn đặt. Bạn sẽ gặp vấn đề về gương nếu bạn đặt cả hai đối số thành TRAILING
.
Tôi biết tôi có thể ghi đè giao diện người dùng hoặc sử dụng JPanel, v.v. Tôi tự hỏi tôi có thiếu thứ gì đó đơn giản trong JLabel không. Nếu không, nó có vẻ giống như một lỗi Java.
FYI đây là jdk1.6.0_06 trên Windows XP.
Nop, tôi cần phải có văn bản trái lý và biểu tượng đúng lý. –
Ah, tôi hiểu ý của bạn là gì. – trashgod