2016-06-21 8 views
1

タブ付きの複数のペインでアプリケーションを作成しようとしていますが、コードを管理しやすくするため、これらのペインのコンテンツを別々のクラスに分けていきたいと考えていました。 javaファイル。同じパッケージ内の別のクラスから新しいメソッドを呼び出す

私は現在 3つのファイル(I)TestLayout.java

package testlayout; 
public class TestLayout 
{ 
    public static void main(String[] args) 
    { 
     MainFrame mainFrameObject = new MainFrame(); 
     mainFrameObject.displayMainFrame(); 
    } 
} 

(ⅱ)MainFrame.java

package testlayout; 

import java.awt.Color; 
import java.awt.Component; 
import java.awt.GridLayout; 
import javax.swing.BorderFactory; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.JPanel; 
import javax.swing.JTabbedPane; 
import javax.swing.SwingConstants; 

public class MainFrame 
{ 
    JFrame masterFrame = new JFrame("JAVA 1.1"); 
    JTabbedPane tabbedPane = new JTabbedPane(); 
    public void displayMainFrame() 
    { 
     masterFrame.setSize(1000, 600); 
     masterFrame.setVisible(true); 
     masterFrame.setResizable(false); 
     masterFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);   
     masterFrame.add(tabbedPane); 

     DisplayReadMe drmObj = new DisplayReadMe(); 
     drmObj.showReadMe(); 
     //showReadMe(); 
    } 

    /* 
    public void showReadMe() 
    { 
     JPanel panelReadMe = new JPanel(new GridLayout(10,1,8,8)); 
     panelReadMe.setBorder(BorderFactory.createEmptyBorder(4, 4, 4, 4)); 
     tabbedPane.addTab("Read Me", null, panelReadMe, "First Tab"); 
     String testreadMeTestMessage = "This is a test message"; 

     JLabel testreadMeLabel = new JLabel(testreadMeTestMessage, SwingConstants.LEFT); 
     testreadMeLabel.setBorder(BorderFactory.createLineBorder(Color.orange,3)); 
     panelReadMe.add(testreadMeLabel); 
    } 
    */ 
} 

と (ⅲ)DisplayReadMe.java

package testlayout; 

import java.awt.Color; 
import java.awt.GridLayout; 
import javax.swing.BorderFactory; 
import javax.swing.JLabel; 
import javax.swing.JPanel; 
import javax.swing.SwingConstants; 

public class DisplayReadMe extends MainFrame 
{ 
    public DisplayReadMe() 
    { 

    } 
    public void showReadMe() 
    { 
     System.out.println("method showReadMe begins"); 
     JPanel panelReadMe = new JPanel(new GridLayout(10,1,8,8)); 
     panelReadMe.setBorder(BorderFactory.createEmptyBorder(4, 4, 4, 4)); 
     tabbedPane.addTab("Read Me", null, panelReadMe, "First Tab"); 
     String testreadMeTestMessage = "This is a test message"; 

     JLabel testreadMeLabel = new JLabel(testreadMeTestMessage, SwingConstants.LEFT); 
     testreadMeLabel.setBorder(BorderFactory.createLineBorder(Color.orange,3)); 
     panelReadMe.add(testreadMeLabel); 
     System.out.println("method showReadMe ends"); 
    } 
} 
を持っています

私のクエリは、// showReadMe(); MainFrameにshowReadMeメソッドがあれば動作します。タブがJFrameに追加され、テストメッセージがボックスに表示されます。

しかし

DisplayReadMe drmObj = new DisplayReadMe(); 
drmObj.showReadMe(); 

コードは、同じことを行うべきではないのですか? showReadMeクラスからshowReadMeメソッドを呼び出すのではなく、showReadMe()と似ていますか?

私は再検証、再描画、スレッディングを試みましたが、何もメソッドを呼び出してタブとメッセージを表示していないようです。

どれガイダンスは感謝 多くのおかげ PG

答えて

1

tabbedPaneをパラメータとしてshowReadMe()に追加し、要素を追加するたびにそのインスタンスを参照してください。それは動作するはずです。

public void showReadMe(JTabbedPane tabbedPane);

...

drmObj.showReadMe(this.tabbedPane)。

希望すると助かります!

+0

素早い対応のためにLorenzoに感謝します。あなたのソリューションは完全に機能しました。 PG – pgee75

+0

あなたは大歓迎です:) –

0

をいただければ幸いあなたは、パラメータとして何を期待していない別のshowReadMeメソッドを持っているかどうかを確認、同じパラメータを持つメソッドを重複していない可能性があります。 showReadMeを上書きする場合は、メインクラスのshowReadMeを作成してから、上に行くことができないのでshowReadMeを継承させます。

私はまったくそれを説明しなければならない。この方法は、実際に働いているが、drmObjタブ区画インスタンスは、メインフレームJTabbedPaneのクラスメンバーに対して異なる

+0

ジョエルさんが迅速な対応をしてくれてありがとうございました。 PG – pgee75

関連する問題