Другой цвет в заголовке 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.