2016-03-23 16 views
0

タブにJPanelを追加しようとしています。 パネルはLanguageTabクラスで作成されますが、なぜ動作しないのかわかりません。 それは愚かかもしれないが、自己教えでは十分ではない。 誰かが私に少しの手を差し伸べることを願っています。ありがとう!
私はあなたのために私が行っていることを理解するためにここに私のコードを持っています!JtabbedPaneにクラスから作成したJPanelを追加する

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

}

が、これは

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; 

パブリッククラスLanguageTabはJPanelのは、ActionListenerを実装して拡張し、私のLanguageTabある{

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

GUIを構築する前に、ImageIOを使用してすべてのイメージを読み取ります。 –

答えて

0

あなたはSに必要あなたのJFrameのサイズを調べて、その内容を見るのに十分な大きさにします。

あなたMainTabコンストラクタの最後の行に以下を追加します。

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

はまた、あなたのLanguageTabコンストラクタ内で、あなたは、クラス自体(this)は、言語を表現することになっているlangTabという変数を持っていますタブ。その後、すべてのボタンをlangTabに追加し、何もしないでください。

langTabの変数を削除すると、LanguageTabコンストラクタのthisという呼び出しがすべて置き換えられます。今、あなたは私があなたの将来のコードの品質を向上させるかもしれないいくつかのことを提案したいと思います気にしない場合は、あなたの質問には、回答されていることを

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

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

:あなたのコンストラクタは、次のようになります。

  1. グローバル変数は、必要なときにのみ使用してください。

    • グローバル変数を4つ宣言します。すべての変数はローカル変数として宣言できます。 Swingを使用して、コンポーネントをグローバルとして宣言して、クラス内のさまざまな場所でアクセスできるようにする必要があります。しかし、可能であれば、ローカルスコープの変数を常に使用することをお勧めします。
  2. あなたの変数可能な最小のスコープを付け

    • あなたは、デフォルトではそれらをpackage範囲を与える、あなたのグローバル変数に任意のアクセスレベル(スコープ)修飾子を持っていません。先に述べたように、さまざまな理由でスイングコンポーネントをグローバルにする必要があることがよくありますが、スコープをprivateより大きくする必要はほとんどありません(宣言されているクラス内からしかアクセスできません)。
  3. 「静的な方法で」静的メソッドにアクセスします。あなたの変数mainFrameを使用してJFramesetDefaultLookAndFeelDecorated()メソッド呼び出し

    • mainFrameクラスのインスタンス(mainFrame = new JFrame()と宣言した)ですので、インスタンスメソッドを呼び出すためにのみ使用します。 setDefaultLookAndFeelDecorated()は(キーワード静的で宣言された)静的メソッドであるため、クラス名でアクセスする必要があります。JFrame.setDefaultLookAndFeelDecorated(true)
  4. はあなたの参照型には注意してください。

    • あなたはJPanelとして(MainTabクラスで)あなたのlanguageTab変数を宣言しました。 JPanelはLanguageTabのようなActionListenerインターフェイスを実装していないので、変数をJPanelと宣言すると、actionPerformed()を呼び出すことができなくなります(または、スイングコンポーネントのアクションリスナーとして設定される可能性が高くなります)。
  5. Javaの変数は、慣例として、小文字で始まる必要があります。

    • 大文字で始まるLanguageTabクラス名の4つのボタンを指定しました。 Javaの規約では、クラスが大文字で始まるのと同じ方法で、変数名が小文字で始まるようにしています。
+0

ありがとう!それは働いている!私は今さらに行くことができます! –

+0

ようこそ@Angelicacruz!この回答があなたの質問を解決した場合は、チェックマークをクリックしてそれを受け入れることを検討してください。これは、あなたが解決策を見つけ出し、回答者とあなた自身の両方に評判を与えていることを広範なコミュニティに示します。 –

関連する問題