web-dev-qa-db-ja.com

JTableヘッダーの背景色を変更するにはどうすればよいですか?

私はもう試した:

table.getTableHeader().setBackground(Color.BLACK);

動作しません。

編集:このコードは私のプロジェクトでのみ機能しません。他のプロジェクトで動作します。色の変化を防ぐプロパティを変更した可能性があります。または、NetBeansにデフォルトの色を保持するプロパティがあるかもしれません。私は何か他のものに気づきました。私のプロジェクトのヘッダーの色は別の方法で輝いています。色の変更が機能する例では、さまざまなグラフィックが表示されます。

編集2:何か他のもの。ボタンの色も変わらないことに気づきました。一般的なものでなければなりません。お役に立てれば。残念ながら、この場合、問題を再現できないため、SSCCEは機能しません。私は確かに正しいコンポーネント名を使用しています。

9
Stefanos Kargas

それを解決しました。 NetBeansの場合:

  • プロジェクトの名前を右クリックします
  • プロパティ
  • アプリケーション-デスクトップアプリ
  • ルックアンドフィール:「Javaデフォルト」を選択します(システムデフォルトでは機能しませんでした)
  • プロジェクトを実行する前に、クリーンアップして再構築することを忘れないでください

また、プロジェクト全体のグラフィックが外観を変更しました。

1
Stefanos Kargas

わたしにはできる。これが私の [〜#〜] sscce [〜#〜]

import Java.awt.*;
import javax.swing.*;
import javax.swing.table.*;

public class TableHeaderBackground {
   public static void main(String[] args) {
      Integer[][] data = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};
      String[] cols = {"A", "B", "C"};

      JTable table = new JTable(data, cols);

      JTableHeader header = table.getTableHeader();
      header.setBackground(Color.black);
      header.setForeground(Color.yellow);

      JOptionPane.showMessageDialog(null, new JScrollPane(table));
   }
}

これで問題が解決しない場合は、独自に作成して投稿することをお勧めします [〜#〜] sscce [〜#〜] 何が問題なのかを確認できます。

これを試してください... table.getTableHeader()。setOpaque(false);

次に、jtableヘッダーの背景を設定します

table.getTableHeader()。setBackground(Color.BLACK);

11

これを行うことをお勧めします:

DefaultTableCellRenderer headerRenderer = new DefaultTableCellRenderer();
headerRenderer.setBackground(new Color(239, 198, 46));

for (int i = 0; i < myJTable.getModel().getColumnCount(); i++) {
        myJTable.getColumnModel().getColumn(i).setHeaderRenderer(headerRenderer);
}
8

テーブルヘッダーも、テーブルセルなどのレンダラーコンポーネントを使用します。

これを見てください:

table.getTableHeader().setDefaultRenderer(new DefaultTableRenderer(){
  {
    // you need to set it to opaque
    setOpaque(true);
  }

@Override
public Component getTableCellRendererComponent(final JTable table,
  final Object value, final boolean isSelected, final boolean hasFocus,
  final int row, final int column) {
    // set the background
    setBackground(yourDesiredColor);
  }
});

動的な色が必要ない場合は、レンダラーのコンストラクターで色を設定することもできます。

3
Stephan