2016-06-21 2 views
1

Я пытаюсь создать приложение с несколькими вкладками и сохранить код управляемым, я хотел бы иметь содержимое для этих панелей в отдельных классах отдельно. java-файлы.Вызов нового метода из другого класса в одном пакете

У меня есть 3 файлов в настоящее время (I) TestLayout.java

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

(II) 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); 
    } 
    */ 
} 

и (III) 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(); и showReadMe в MainFrame, он работает. Вкладка добавляется в JFrame, и тестовое сообщение отображается в поле.

Но если код

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

, а не делать то же самое? Я не называю метод showReadMe из класса DisplayReadMe, похожий на showReadMe().

Я пробовал проверять, перекрашивать и нарезать резьбу, и ничто не вызывает вызов метода и показывает вкладку и сообщение?

Любое руководство будет с благодарностью оценили Большое спасибо PG

ответ

1

Метод на самом деле работает, но tabbedPane экземпляр в drmObj отличается по отношению к члену классаJTabbedPane в MainFrame. Попытайтесь добавить tabbedPane как параметр в showReadMe() и обращаться к этому экземпляру при добавлении элементов. Он должен работать.

public void showReadMe (JTabbedPane tabbedPane);

...

drmObj.showReadMe (this.tabbedPane);

Надеюсь, это поможет!

+0

Спасибо, Лоренцо, за быстрый ответ. Ваше решение отлично работало. PG – pgee75

+0

Добро пожаловать :) –

0

вы можете не дублируется метод с теми же параметрами, проверьте, если у вас есть еще один метод showReadMe который не ожидает ничего в качестве параметра. , если вы сделаете переписку с showReadMe, помните, что она сделает showReadMe основного класса, а затем сделает showReadMe унаследованным, поскольку он не может идти вверх.

Не знаю, если я объяснил это вообще.

+0

Спасибо, Джоэл за быстрый ответ, это был действительно параметр. PG – pgee75