2016-06-21 96 views
1

我試圖用幾個選項卡式窗格創建應用程序,爲了使代碼易於管理,我希望將這些窗格的內容分開放在單獨的類中。 java文件。從同一個包中的不同類調用新方法

我有3個文件當前 (ⅰ)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(); 

代碼,而不是做同樣的事情?我是不是從DisplayReadMe類調用showReadMe方法,類似於showReadMe()。

我試過重新驗證,重繪和線程,似乎沒有什麼調用方法並顯示標籤和消息?

任何指導,將衷心感謝 非常感謝 PG

回答

1

的方法,實際上是工作的,但在drmObj選項卡窗格實例是與大型機對於JTabbedPane的類成員不同。嘗試添加tabbedPane作爲showReadMe()中的參數,並在添加元素時參考該實例。它應該工作。

public void showReadMe(JTabbedPane tabbedPane);

...

drmObj.showReadMe(this.tabbedPane);

希望它有幫助!

+0

謝謝洛倫佐的快速反應。您的解決方案完美運作PG – pgee75

+0

不客氣:) –

0

你可能沒有重複的方法有相同的參數,檢查是否有誰無所求作爲參數的另一個showReadMe方法。 如果您對showReadMe進行覆蓋,請記住它會使showReadMe成爲主類,然後會使showReadMe繼承,因爲它無法繼續。

我donno如果我解釋得很好。

+0

謝謝喬爾的快速反應,它確實與參數有關。 PG – pgee75

相關問題