2016-03-23 11 views
0

Ich versuche, ein JPanel zu einer Registerkarte hinzuzufügen. Das Panel ist mit der LanguageTab-Klasse erstellt, aber ich kann nicht herausfinden, warum es nicht funktioniert. Es ist vielleicht dumm, aber Autodidakt ist hier nicht genug. Hoffe jemand kann mir eine kleine Hand geben. Vielen Dank!
Ich habe meinen Code hier unten für Sie zu verstehen, was ich durchmache!Hinzufügen eines JPanels aus Klasse zu JtabbedPane

public class MainTab extends JPanel { 
JTabbedPane mainTab; 
JPanel languageTab; 
JFrame mainFrame; 
JPanel mainPanel; 

public MainTab(){ 
    mainFrame = new JFrame(); 
    mainTab = new JTabbedPane(); 

    mainPanel = new JPanel(); 
    //mainPanel.add(new JTextField("ciao")); 
    mainPanel.add(new JLabel(new ImageIcon("C:\\Users\\angelica\\Desktop\\developed.jpg"))); 

    //languageTab = new LanguageTab(); 


    mainTab.add("main",mainPanel); 
    mainTab.add("Language Tab",languageTab); 
    add(mainTab); 

    mainFrame.add(mainTab); 
    mainFrame.setVisible(true); 
    mainFrame.setDefaultLookAndFeelDecorated(true); 
} 

public static void main(String args[]){ 
    MainTab mt = new MainTab(); 
} 

}

und das ist mein LanguageTab ist

import java.awt.GridLayout; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 

import javax.swing.ImageIcon; 
import javax.swing.JButton; 
import javax.swing.JPanel; 

public class LanguageTab erweitert JPanel Action implementiert {

public LanguageTab(){ 

    ImageIcon icona = new ImageIcon("C:\\Users\\angelica\\workspace\\whatever\\src\\whatever\\ita.jpg"); 
    ImageIcon icona_DSA = new ImageIcon("C:\\Users\\angelica\\workspace\\whatever\\src\\whatever\\ita2.jpg"); 
    ImageIcon iconb = new ImageIcon("C:\\Users\\angelica\\workspace\\whatever\\src\\whatever\\brit.jpg"); 
    ImageIcon iconb_DSA =new ImageIcon("C:\\Users\\angelica\\workspace\\whatever\\src\\whatever\\brit2.jpg"); 

    JPanel langTab= new JPanel(); 
    langTab.setLayout(new GridLayout(2,2)); 

    JButton ADHDbutton = new JButton("ADHD ENGLISH"); 
    ADHDbutton.setIcon(iconb); 
    ADHDbutton.setActionCommand("adhd_english"); 
    ADHDbutton.addActionListener(this); 

    JButton ADHDbutton1 = new JButton("ADHD \n ITALIANO"); 
    ADHDbutton1.setIcon(icona); 
    ADHDbutton1.setActionCommand("adhd_italiano"); 
    ADHDbutton1.addActionListener(this); 

    JButton DSAbutton = new JButton("DSA ENGLISH"); 
    DSAbutton.setIcon(iconb_DSA); 
    DSAbutton.setActionCommand("dsa_english"); 
    DSAbutton.addActionListener(this); 

    JButton DSAbutton1 = new JButton("DSA ITALIANO"); 
    DSAbutton1.setIcon(icona_DSA); 
    DSAbutton1.setActionCommand("dsa_italiano"); 
    DSAbutton1.addActionListener(this); 

    langTab.add(ADHDbutton); 
    langTab.add(ADHDbutton1); 
    langTab.add(DSAbutton); 
    langTab.add(DSAbutton1); 

    //return toModify; 
} 

@Override 
public void actionPerformed(ActionEvent arg0) { 
    // TODO Auto-generated method stub 

} 

}

+0

Lesen Sie alle Ihre Bilder mit ImageIO, bevor Sie die GUI erstellen. –

Antwort

0

Sie müssen s und die Größe Ihres JFrame, so dass es groß genug ist, um seinen Inhalt zu sehen.

die folgenden als die letzte Zeile Ihres MainTab Konstruktor hinzu:

mainFrame.setSize(new Dimension(300, 300)); 

, zusätzlich in Ihrem LanguageTab Konstruktor, haben Sie eine Variable langTab genannt, wenn die Klasse selbst (this) soll die Sprache darstellen Tab. Sie fügen dann alle Ihre Knöpfe zu langTab hinzu und tun nie etwas damit.

Löschen Sie die Variable langTab ersetzen Sie jeden Aufruf zu ihm mit this im 10 Constructor. Ihr Konstruktor sollte dann in etwa so aussehen:

public LanguageTab() { 
    // button initialization goes here... 

    this.add(ADHDbutton); 
    this.add(ADHDbutton1); 
    this.add(DSAbutton); 
    this.add(DSAbutton1); 
} 

Nun, da Ihre Frage beantwortet wurde, wenn Sie nichts dagegen haben würde Ich mag ein paar Dinge vorschlagen, die Ihre zukünftige Codequalität verbessern könnten.

  1. Verwenden Sie nur globale Variablen, wenn dies erforderlich ist.

  2. Sie deklarieren vier globale Variablen für verschiedene Teile Ihrer Benutzeroberfläche, die alle stattdessen als lokale Variablen deklariert werden können. Bei der Arbeit mit Swing ist es oft notwendig, Komponenten als global zu deklarieren, so dass auf sie an verschiedenen Stellen innerhalb der Klasse zugegriffen werden kann, was für Sie der Fall sein kann. Sie sollten jedoch immer lokale Bereichsvariablen bevorzugen, wenn es möglich ist.
  3. Geben Sie Ihre Variablen den kleinstmöglichen Umfang

    • Sie haben keine Zugriffsebene (scope) Modifikatoren auf globale Variablen, die ihnen einen package Umfang standardmäßig gibt. Wie ich bereits erwähnt habe, ist es oft notwendig, Swing-Komponenten aus verschiedenen Gründen global zu machen, aber es ist fast nie notwendig, dass sie einen Bereich größer als private haben (so dass sie nur innerhalb der Klasse zugänglich sind, in der sie deklariert sind).
  4. Zugriff auf statische Methoden auf "statische Weise".

    • Sie rufen JFrame ‚s setDefaultLookAndFeelDecorated() Methode Ihre Variable mainFrame verwenden. ist eine Instanz der Klasse JFrame (Sie deklarierten es mit den Worten mainFrame = new JFrame()), so dass Sie es nur verwenden, um Instanz Methoden aufzurufen. setDefaultLookAndFeelDecorated() ist eine statische Methode (deklarierte mit dem Schlüsselwort statische) und damit mit dem Klassennamen zugegriffen werden soll: JFrame.setDefaultLookAndFeelDecorated(true)
  5. Seien Sie mit Ihren Referenztypen vorsichtig.

    • Sie haben Ihre languageTab Variable (in der MainTab Klasse) als JPanel erklärt. JPanel implementiert nicht die ActionListener Schnittstelle wie Ihre tut, also, indem Sie Ihre Variable als JPanel deklarieren, verlieren Sie die Fähigkeit, actionPerformed() darauf zu nennen (oder eher als Aktion Listener einiger Swing-Komponente).
    • Variablen in Java sollten per Konvention mit einem Kleinbuchstaben beginnen.

    • Sie gaben Ihre vier Schaltflächen in den Klassennamen , die mit Großbuchstaben beginnen. Die Java-Konvention ist für Variablennamen, die mit einem Kleinbuchstaben beginnen, genau wie Klassen mit einem Großbuchstaben beginnen sollten.
+0

danke! es funktioniert! Ich kann jetzt weiter gehen! –

+0

Gern geschehen @Angelicacruz! Wenn diese Antwort Ihre Frage gelöst hat, können Sie sie durch Anklicken des Häkchens akzeptieren. Dies zeigt der breiteren Gemeinschaft, dass Sie eine Lösung gefunden haben und sowohl dem Antworter als auch Ihnen einen guten Ruf verschaffen. –

Verwandte Themen