簡體   English   中英

為什么不是所有Java Swing JTable都有焦點指示器

[英]Why not all Java Swing JTables have focus indicator

我試圖弄清楚為什么大型應用程序中的某些JTables具有焦點指示器而有些則沒有。 為了調試這個問題,我添加了代碼:

UIManager.put("Table.focusCellHighlightBorder",new BorderUIResource(
    new LineBorder(new Color(255,0,0))); 

那些焦點指標的JTables變為紅色,但我仍然沒有看到所有JTables的焦點指標。 知道為什么JTable的單元格不會顯示焦點指示符嗎?

您需要在創建表之前“設置”UI屬性。

如果您仍有問題,請發布您的SSCCE ,以證明問題,因為我們無法猜測您在做什么。

也許他/她的意思(在你的例子中添加一些......)

public JavaGUI() {
    CustomModel model = new CustomModel();
    JTable table = new JTable(model) {

        private static final long serialVersionUID = 1L;
        private Border outside = new MatteBorder(1, 0, 1, 0, Color.red);
        private Border inside = new EmptyBorder(0, 1, 0, 1);
        private Border highlight = new CompoundBorder(outside, inside);

        @Override
        public Component prepareRenderer(
                TableCellRenderer renderer, int row, int column) {
            Component c = super.prepareRenderer(renderer, row, column);
            JComponent jc = (JComponent) c;
            if (isRowSelected(row)) {
                jc.setBackground(Color.orange);
                jc.setBorder(highlight);
            } else {
                jc.setBackground(Color.white);
            }
            return c;
        }
    };
    for (int i = 1; i <= 16; i++) {
        model.addRow(newRow(i));
    }
    this.add(table);
} 

兩個JTable都使用了一個單元格渲染器,它繼承了DefaultTableCellRenderer並覆蓋了getTableCellRendererComponent方法。 顯示焦點指示符的JTable的重寫getTableCellRendererComponent方法稱為super.getTableCellRendererComponent方法,但是未顯示焦點指示符的JTable的重寫getTableCellRendererComponent方法未調用super.getTableCellRendererComponent方法。

帶焦點指示的JTable:

    public Component getTableCellRendererComponent(JTable table, Object value,
            boolean isSelected, boolean hasFocus, int row, int col) {
    Component comp = super.getTableCellRendererComponent(table, value,
        isSelected, hasFocus, row, col);
    ....

沒有焦點指示的JTable:

    public Component getTableCellRendererComponent(JTable table, Object value,
                                             boolean isSelected,
                                             boolean hasFocus, int row,
                                             int col) {
  for (int i = 0; i < ids.length; i++) {
      ....

暫無
暫無

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

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