0

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

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ファイルを実行して、JTableを含むtabbedPaneを表示するEquityFrameのインスタンスを作成します。ただし、独自のmainメソッドを使用してEquityFrameを実行して取得したGUIは、別のコードでインスタンスを作成して取得したGUIとは異なります。独自のメインメソッドを使用して実行すると、テーブルのヘッダーの色が変わります。ただし、他の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.backgroundは、 UIプロパティをサポートするルックアンドフィールを示しています。2番目の画像は、プロパティをサポートしていないNimbus L&Fのようです。

于 2012-05-22T14:36:59.010 に答える
1

メインメソッドの定義に色を設定するコードはありますか?その場合は、代わりにJFrameまたはJTableのコンストラクターに入れてください。

于 2012-05-22T10:26:36.150 に答える