我遇到了一个问题,如果我在包含包含 JTable 的 JFrame 代码的同一 java 文件中使用 main 方法,并且我将标头颜色设置为黄色,当我运行它时,标头将是黄色。但是,如果我通过从其他类调用 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
公平框架类代码
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的选项卡式窗格。但是,我从使用自己的 main 方法运行 EquityFrame 中获得的 GUI 与我在另一个代码中创建它的实例获得的 GUI 不同。如果我使用自己的 main 方法运行它,表格的标题中会有颜色变化。但是,如果我从另一个 java 类运行它,颜色仍然是默认值。
如果我使用其主方法运行它:http://tinypic.com/r/2r5yjdj/6
如果我使用其他类运行它来调用其构造函数以生成 JFrame:http://tinypic.com/r/3523yax/6
再次感谢您提供的任何帮助!希望这能更多地阐明我的问题。
请确保在构造依赖于新值的任何内容之前更改 UI 属性,最好是在启动事件调度线程之前。
UIManager.put("TableHeader.background", Color.yellow);
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
new Application();
}
});
或者,您可以调整方法applyUI()
中显示的方法;它可以在构造函数中调用,如图所示,或者在系统调用updateUI()
时调用。
附录:您的第一个图像显示了支持 TableHeader.background
UI 属性的外观。第二张图片似乎是Nimbus L&F,它不支持该属性。
主方法的定义中设置颜色的代码吗?如果是这样,请将其放入 JFrame 或 JTable 的构造函数中。