2016-06-21 94 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

相关问题