2

この次のコードが機能しないのはなぜですか? 問題はどこだ?私の jTable は jTable1 として開始されます。

jTable1.setDefaultRenderer(Object.class,new TableCellRenderer(){

            @Override
            public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
                Component c = (Component) table.getCellRenderer(row, column);
                c.setBackground(row%2==0 ? Color.white : Color.yellow);                        
                return c;
            };

        });
4

6 に答える 6

21

最近、javax.swing.table.DefaultTableCellRenderer のソース コードを調べているときに、アプリケーション内のすべてのテーブルの行を交互に色分けする次の簡単なソリューションを見つけました。

コードでは、デフォルトのルック アンド フィールを設定した直後に、次のコードを挿入します。

UIDefaults defaults = UIManager.getLookAndFeelDefaults();
if (defaults.get("Table.alternateRowColor") == null)
    defaults.put("Table.alternateRowColor", new Color(240, 240, 240));
于 2014-10-26T19:18:39.563 に答える
2

私にとっての正解は次のとおりです...

jTable1.setDefaultRenderer(Object.class, new TableCellRenderer(){
            private DefaultTableCellRenderer DEFAULT_RENDERER =  new DefaultTableCellRenderer();
            @Override
            public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
                Component c = DEFAULT_RENDERER.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
                if (row%2 == 0){
                    c.setBackground(Color.WHITE);
                }
                else {
                    c.setBackground(Color.LIGHT_GRAY);
                }                        
                return c;
            }

        });
于 2013-07-20T13:31:05.423 に答える