Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Java

Thiết lập border cho các item của JComboBox trong Java Swing

Custom Renderer cho JComboBox

Mặc định JComboBox dùng DefaultListCellRenderer (kế thừa JLabel) để vẽ từng item. Để tùy chỉnh border, padding, background cho item, tạo class extends DefaultListCellRenderer và override getListCellRendererComponent().

Ví dụ: Thêm padding (EmptyBorder) và background xám cho item


import java.awt.*;
import javax.swing.*;

public class JComboBoxBorderDemo extends JFrame {
    public JComboBoxBorderDemo() {
        setTitle("JComboBox Item Border Demo");
        String[] cities = {"Hyderabad", "Mumbai", "Pune", "Bangalore", "Chennai", "Coimbatore"};

        JComboBox<String> combo = new JComboBox<>(cities);
        combo.setRenderer(new CustomComboBoxRenderer());

        add(combo, BorderLayout.NORTH);
        setSize(400, 300);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setLocationRelativeTo(null);
        setVisible(true);
    }

    // Custom renderer
    class CustomComboBoxRenderer extends DefaultListCellRenderer {
        @Override
        public Component getListCellRendererComponent(JList<?> list, Object value,
                int index, boolean isSelected, boolean cellHasFocus) {
            JLabel label = (JLabel) super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
            // Thêm padding 7px cho 4 phía
            label.setBorder(BorderFactory.createEmptyBorder(7, 7, 7, 7));
            label.setBackground(Color.LIGHT_GRAY);
            label.setOpaque(true); // cần opaque để background hiển thị
            return label;
        }
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(JComboBoxBorderDemo::new);
    }
}

Kết quả

Thiết lập border cho các item của JComboBox trong Java Swing

Lưu ý: Renderer chỉ ảnh hưởng hiển thị item trong dropdown list. Để tùy chỉnh editor (ô text khi editable), dùng setEditor().