0

我遇到了一个问题,如果我在同一个 java 文件中使用 main 方法,该文件包含包含 JTable 的 JFrame 的代码,并且我将标题颜色设置为黄色,当我运行它时,标题将为黄色。但是,如果我通过从其他类调用它来实例化 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 的 tabbedPane。但是,我通过使用自己的 main 方法运行 EquityFrame 获得的 GUI 与我在另一个代码中创建它的实例获得的 GUI 不同。如果我使用它自己的 main 方法运行它,表头的颜色会发生变化。但是,如果我从其他 java 类运行它,颜色仍然是默认值。

如果我使用它的主要方法运行它:http: //tinypic.com/r/2r5yjdj/6

如果我使用其他类运行它来调用它的构造函数来生成 JFrame: http ://tinypic.com/r/3523yax/6

再次感谢您提供的任何帮助!希望这能更清楚地说明我的问题。

4

2 回答 2

3

在构造任何依赖于新值的东西之前,一定要更改 UI 属性,最好是在启动事件调度线程之前。

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

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

或者,您可以调整方法中显示方法applyUI();它可以在构造函数中调用,如图所示,或者在系统调用updateUI().

附录:您的第一张图片显示了支持TableHeader.backgroundUI 属性的外观。第二张图片似乎是 Nimbus L&F,它支持该属性。

于 2012-05-22T14:36:59.010 回答
1

是在你的主要方法的定义中设置颜色的代码吗?如果是这样,请将其放在 JFrame 或 JTable 的构造函数中。

于 2012-05-22T10:26:36.150 回答