2016-06-21 6 views
1

Ich versuche, eine Anwendung mit mehreren Registerkarten zu erstellen, und um den Code überschaubar zu halten, wollte ich den Inhalt für diese Bereiche in separaten Klassen haben, in separaten. Java-Dateien.Aufruf einer neuen Methode aus einer anderen Klasse im selben Paket

Ich habe 3 Dateien aktuell (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); 
    } 
    */ 
} 

und (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"); 
    } 
} 

Meine Abfrage ist, wenn ich das // showReadMe() auskommentiere; und showReadMe Methode in MainFrame funktioniert es. Die Registerkarte wird dem JFrame hinzugefügt und die Testnachricht wird in der Box angezeigt.

Aber sollte die

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

Code, nicht das gleiche tun? Rufe ich nicht die showReadMe-Methode aus der DisplayReadMe-Klasse auf, ähnlich wie showReadMe().

Ich habe versucht, Revalidate, Repaint und Threading und nichts scheint die Methode aufrufen und zeigen die Registerkarte und Nachricht?

würde Jede Führung dankbar Vielen Dank PG

Antwort

1

Das Verfahren arbeitet tatsächlich, aber die tabbedPane Instanz in drmObj unterscheidet sich in Bezug auf die JTabbedPane Klassenmitglied in Mainframe. Versuchen Sie tabbedPane als Parameter in showReadMe() hinzuzufügen und auf diese Instanz verweisen, wenn Elemente hinzugefügt werden. Es sollte funktionieren.

öffentliche void showReadMe (JTabbedPane tabbedPane);

...

drmObj.showReadMe (this.tabbedPane);

Hoffe es hilft!

+0

Danke Lorenzo für die schnelle Antwort. Deine Lösung hat perfekt funktioniert. PG – pgee75

+0

Gern geschehen :) –

0

Sie können nicht dupliziert Verfahren mit denselben Parametern geschätzt, wenn Sie eine andere showReadMe Methode haben, die nichts als Parameter erwartet. Wenn Sie das showReadMe überschreiben, denken Sie daran, dass es showReadMe der Hauptklasse erstellt und dann showReadMe geerbt, da es nicht mehr nach oben gehen kann.

ich donno, wenn ich es überhaupt gut erklärte.

+0

Vielen Dank Joel für die schnelle Antwort, es war in der Tat Parameter bezogen. PG – pgee75

Verwandte Themen