7

一部のデータを視覚化するために JTable を使用しています。1 つの列は、チェックボックスを介してブール値のデータを表示する予定です。これは、テーブル モデルのオーバーライドされた getColumnClass() 関数から Boolean.class を返すことで実現しました。

残念ながら、これはチェックボックスを持つセルになりますが、現在の行に適した背景色はありません。

オリジナル

この投稿の回答を使用してこれを修正しました: JTable - Boolean Cell Type - Background

Boolean.class の修正

今、私は交互の行のコントラストを上げようとしていました. これは、私が使用している Nimbus LAF の適切なプロパティを設定することで実現しました。

UIDefaults defaults = UIManager.getLookAndFeelDefaults();
defaults.put("Table.alternateRowColor", new Color(217, 217, 217));

Nimbus プロパティの設定あり

ご覧のとおり、ブールセルの背景はまだ古い NimbusTable.alternateRowColorカラーです。

これを変更する方法はありますか?私はこれを完全に間違っていますか?交互の背景色とより多くのコントラストを実現するより良い方法はありますか?

編集

原因

Java バージョン "1.7.0_17" Java(TM) SE ランタイム環境 (ビルド 1.7.0_17-b02) Java HotSpot(TM) サーバー VM (ビルド 23.7-b01、混合モード)、OS は Ubuntu 12.04

4

4 に答える 4

7

私は(ついに)それを機能させることができました。秘密は、何かを作成する前にデフォルトを変更することでした。

ここに画像の説明を入力

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
import java.awt.EventQueue;
import javax.swing.JCheckBox;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
import javax.swing.border.Border;
import javax.swing.border.EmptyBorder;
import javax.swing.plaf.UIResource;
import javax.swing.table.AbstractTableModel;
import javax.swing.table.TableCellRenderer;

public class TestTable10 {

    public static void main(String[] args) {
        new TestTable10();
    }

    public TestTable10() {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                try {
                    UIManager.setLookAndFeel("com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel");
                } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
                }

                UIManager.getLookAndFeelDefaults().put("Table.alternateRowColor", Color.RED);

                JTable table = new JTable(new MyModel());
                ((JComponent) table.getDefaultRenderer(Boolean.class)).setOpaque(true);


                JFrame frame = new JFrame("Testing");
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                frame.setLayout(new BorderLayout());
                frame.add(new JScrollPane(table));
                frame.pack();
                frame.setLocationRelativeTo(null);
                frame.setVisible(true);
            }
        });
    }

    public class MyModel extends AbstractTableModel {

        @Override
        public int getRowCount() {
            return 10;
        }

        @Override
        public int getColumnCount() {
            return 2;
        }

        @Override
        public Object getValueAt(int rowIndex, int columnIndex) {
            switch (columnIndex) {
                case 0:
                    return "Hello";
                case 1:
                    return true;
            }
            return "?";
        }

        @Override
        public Class<?> getColumnClass(int columnIndex) {
            return columnIndex == 0 ? String.class : Boolean.class;
        }
    }

}
于 2013-04-17T08:04:50.503 に答える
0

Nimbus L&F を設定した直後に、次の行を追加します。

    UIManager.getLookAndFeelDefaults().put("Table:\"Table.cellRenderer\".background", Color.DARK_GRAY);
    UIManager.getLookAndFeelDefaults().put("Table.background",new ColorUIResource(Color.DARK_GRAY));
    UIManager.getLookAndFeelDefaults().put("Table.alternateRowColor",Color.DARK_GRAY.brighter());

Table.background の ColorUIResource の使用法に注意してください。これにより、チェックボックスの背景の問題が修正されました。

于 2014-03-09T23:38:08.363 に答える