Другой цвет в заголовке JTable

Я столкнулся с проблемой, когда я использую метод main в том же Java-файле, который содержит код для JFrame, который содержит JTable, и где я устанавливаю цвет заголовка на желтый, когда я его запускаю, заголовок будет желтым. Однако, если я создаю экземпляр JFRame, вызывая его из других классов, заголовок не будет желтым, а вместо этого будет цветом по умолчанию. Есть ли способ гарантировать, что цвет останется прежним, даже если я создаю экземпляр JFrame и, следовательно, JTable из других классов? Большое спасибо! Я буду рад уточнить вещи, если я не объяснил четко.

Привет, я извиняюсь, что не предоставил код заранее. Вот:

EquityFrame eq= new EquityFrame(file,"Apr2012");
this.dispose();// this code is in another class of a JFrame which will call the constructor of EquityFrame class

Код класса EquityFrame

    public EquityFrame(File file, String nameTab){
    createAndShowGUI( file,  nameTab);
}

    private  void createAndShowGUI(File file, String nameTab){
    //create frame

    JTabbedPane  tabPane= new JTabbedPane();
    //pre-processing
    init(file,nameTab);
    //adding tabs
    tabPane.addTab("Proposal", makeAdminPanel());
    JFrame.setDefaultLookAndFeelDecorated(true);
    JFrame jf= new JFrame("CGH Equity Program");
    jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    jf.setLayout(new BorderLayout());
    jf.add(tabPane,BorderLayout.CENTER);
    int w = Toolkit.getDefaultToolkit().getScreenSize().width;
    int h = Toolkit.getDefaultToolkit().getScreenSize().height;
    jf.setSize(w, h);
    jf.setVisible(true);
}
private JPanel makeAdminPanel(){
    JPanel jp=new JPanel();
    String[] column = {"Job Grade", "Job Title", "Min", "Midpoint", "Max", 
        "Lowest", "P10", "P25", "Median", "P65", "P75", "P90", 
        "Highest", "Average"};
    String[][] data= getArrayOfValuesForEachJobGrade();
    jp.setLayout(new BorderLayout());
    JTable jt= new JTable(data,column);
    JTableHeader th=jt.getTableHeader();
    th.setBackground(java.awt.Color.pink);
    th.setEnabled(false);
    jt.setTableHeader(th);
    jt.setEnabled(false);
    jp.add(jt,BorderLayout.CENTER);
    JScrollPane scrollPane = new JScrollPane(jt, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
    scrollPane.setEnabled(false);
    jp.add(scrollPane, BorderLayout.CENTER);
    return jp;
}

Сначала я запустите первый файл Java, который создаст экземпляр EquityFrame, который будет отображать панель с вкладками с JTable в нем. Однако графический интерфейс, который я получаю при запуске EquityFrame с его собственным основным методом, отличается от графического интерфейса, который я получаю при создании его экземпляра в другом коде. Если я запускаю его, используя собственный метод main, в заголовке таблицы произойдет изменение цвета. Тем не менее, цвет остается по умолчанию, если я запускаю его из другого класса Java.

Если я запускаю его, используя его основной метод: http://tinypic.com/r/2r5yjdj/6

Если я запускаю его, используя другой класс, чтобы вызвать его конструктор для генерации JFrame: http://tinypic.com/r/3523yax/6

Еще раз спасибо за любую помощь! Надеюсь, что это проливает больше света на мою проблему.

2 ответа

Решение

Обязательно измените свойство пользовательского интерфейса перед созданием чего-либо, основанного на новом значении, предпочтительно перед запуском потока диспетчеризации событий.

UIManager.put("TableHeader.background", Color.yellow);
EventQueue.invokeLater(new Runnable() {

    @Override
    public void run() {
        new Application();
    }
});

Кроме того, вы можете адаптировать подход, показанный здесь в методе applyUI(); он может быть вызван в конструкторе, как показано, или когда системные вызовы updateUI(),

Приложение: Ваше первое изображение показывает Look & Feel, который поддерживает TableHeader.background Пользовательский интерфейс. Второе изображение, кажется, Nimbus L&F, которое не поддерживает свойство.

Код, который устанавливает цвет в определении вашего основного метода? Если так, поместите это в конструкторы для JFrame или JTable.

Другие вопросы по тегам