簡體   English   中英

如何將鼠標偵聽器添加到自定義JTable標頭單元格渲染器中的組件

[英]How to add mouse listener to a component in a custom JTable header cell renderer

我實現了一個JTable實例使用的自定義標頭單元格渲染器。

private final class TableHeaderCellRenderer extends DefaultTableCellRenderer {
    private static final long serialVersionUID = 6288512805541476242L;

    public TableHeaderCellRenderer() {
        setHorizontalAlignment(CENTER);
        setHorizontalTextPosition(LEFT);
        setVerticalAlignment(BOTTOM);
        setOpaque(false);
    }

    @Override
    public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
        super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
        setIcon(getIcon(table, column));

        JPanel headerContainer = new JPanel();
        headerContainer.setLayout(new BorderLayout());
        headerContainer.setBorder(UIManager.getBorder("TableHeader.cellBorder"));

        Box buttonBox = Box.createHorizontalBox();

        JButton pinButton = new JButton();
        pinButton.setOpaque(false);
        pinButton.setMaximumSize(new Dimension(16, 16));
        pinButton.addMouseListener(new MouseAdapter() {
            @Override
            public void mousePressed(MouseEvent e) {
                JOptionPane.showMessageDialog(null, "ASD");
            }
        });

        buttonBox.add(pinButton);

        headerContainer.add(this, BorderLayout.CENTER);
        headerContainer.add(buttonBox, BorderLayout.EAST);

        return headerContainer;
    }
}

當我單擊“ Pin Button”時,不出現消息對話框,而是僅進行排序。 注意,相應的JTable實例使用setAutoCreateRowSorter(true);。 這可能是按鈕不接收任何mousePressed事件的原因嗎?

注意,相應的JTable實例使用setAutoCreateRowSorter(true)。 這可能是按鈕不接收任何mousePressed事件的原因嗎?

那不是問題。

渲染器不是真正的組件。 它只是組件的繪畫,因此它不能接收事件。

如果要處理mouseEvent,則需要將MouseListener添加到表頭。 然后,您需要將鼠標指針轉換為適當的表標題列,然后進行處理。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM