2016-11-08 9 views
0

ooメソッドを使用して2つの異なるパネルにラベルを追加しようとしています。しかし、メインクラスでパネルを作成すると、ドライバクラスには表示されません。私は今ooの概念を学び始めました。ドライバクラスのパネルをインスタンス化すると動作しますが、メインクラスでインスタンス化するときには動作しません。これが私の言い方です。2つの別々のパネルにラベルを追加するjavaでクラスを作成するgui、ドライバクラス、メインクラス

メインクラス

import java.awt.BorderLayout; 
import javax.swing.JFrame; 

public class borderMain { 

    public static void main(String[] args) { 
     JFrame frame = new JFrame("Border Layout"); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

     borderpanel p1 = new borderpanel(); 
     borderpanel p2 = new borderpanel(); 

     frame.getContentPane().add(p1, BorderLayout.NORTH); 
     frame.getContentPane().add(p2, BorderLayout.SOUTH); 

     frame.pack(); 
     frame.setVisible(true); 
    } 
} 

ドライバクラス - 私はp1.add(lbl1);を行うと、これは私はあなたが二つのフィールドLBL1とTXT1のgetterを持つことができます

その後
import java.awt.*; 
import javax.swing.*; 
public class borderpanel extends JPanel { 
     private JLabel lbl1, lbl2, lbl3; 
     private JTextField txt1; 

    public borderpanel(){ 
     lbl1 = new JLabel("Hello"); 
     lbl2 = new JLabel("Hi"); 
     lbl3 = new JLabel("Hey"); 

     txt1 = new JTextField("Hello"); 

     p1.add(lbl1); 
     p2.add(lbl2); 
     p1.add(lbl3); 
     p2.add(txt1); 
     } 
} 
+0

'borderpanel'はあなたが使用している' 'JPanel''であるため、' this.add'を 'borderpanel'(ラクラクのクラスではネーミング規則の' Borderpanel'と同じクラス)としたいと思います。 – SomeJavaGuy

+0

明確にしてください。作成した 'JLabel'と' JTextField'オブジェクトをすべて 'borderpanel'の両方のインスタンスに追加しようとしていますか? 'lbl1'と' lbl2'を 'borderpanel'''p1'と' lbl3'と 'txt1'に' borderpanel''p2'を追加します。どちらの場合でも、 'p1'と' p2'はアクセスしようとしているスコープに存在しないので、あなたが今やっていることはうまくいきません。さらに、クラスは 'CamelCase'の中に大文字で始まります。 'BorderPanel'と' BorderMain' –

+0

@ d.j.brown私はlbl1、lbl2をborderpel p1に追加しようとしています。他はp2に追加しようとしています。私はちょうどborderpanel()クラスの中でp1とp2をインスタンス化する必要があります – norskdreamer

答えて

0
public borderpanel(String message, String message2){ 
    lbl1 = new JLabel(message); 
    txt1 = new JTextField(message2); 
} 

エラーを取得していますどこにあります。場合によっては、frame.getContentPane()。add()メソッドでgetterを使用します。 lbl1、lbl2、lbl3の代わりに、境界パネルをインスタンス化するだけでもかまいません。 p1とp2で

1

BorderPanelクラス内のBorderMainクラスの変数にアクセスしようとしているため、エラーが発生しています。このように別のクラスのあるクラスの変数にアクセスすることはできません。あなたのコメントによると

私はlbl1、lbl2をborderpanel p1に追加しようとしています。他はp2に追加しようとしています。

これが本当に必要な場合は、別のクラスをBorderPanelとして持つ必要はありません。このようにすることができます。あなたはそれ以来の相続JPanelのちょうどサブクラスについて何かを学習している場合を除き

BorderMain

public class BorderMain{ 
    public static void main(String[] args){ 
     JLabel lbl1, lbl2, lbl3; 
     JTextField txt1; 

     JFrame frame = new JFrame("Border Layout"); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

     borderpanel p1 = new borderpanel(); 
     borderpanel p2 = new borderpanel(); 

     lbl1 = new JLabel("Hello"); 
     lbl2 = new JLabel("Hi"); 
     lbl3 = new JLabel("Hey"); 

     txt1 = new JTextField("Hello"); 

     p1.add(lbl1); 
     p2.add(lbl2); 
     p1.add(lbl3); 
     p2.add(txt1); 

     frame.getContentPane().add(p1, BorderLayout.NORTH); 
     frame.getContentPane().add(p2, BorderLayout.SOUTH); 

     frame.pack(); 
     frame.setVisible(true); 
    } 
} 

BorderPanel

import java.awt.*; 
import javax.swing.*; 
public class BorderPanel extends JPanel { 

    public borderpanel(){} 
} 

しかし、ここでBorderPanelは無用です。 JPanelでも同じことができます。

関連する問題