2016-11-08 26 views
0

我試圖在兩個不同的面板上使用oo方法添加標籤。但是當我在我的主類中創建面板時,他們無法在我的驅動程序類中看到。我剛開始學習oo概念。如果我在我的驅動程序類中實例化面板,它可以工作,但不是當我在主類中實例化時,這是我被告知的方式。在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);這是我得到

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

我想你''this.add',作爲'borderpanel'(類名爲'Borderpanel'作爲命名約定)作爲你的'borderpanel'是你正在使用的實際'JPanel'。 – SomeJavaGuy

+0

請澄清。你是否試圖將所有創建的'JLabel'和'JTextField'對象添加到'borderpanel'的兩個實例?或者將'lbl1'和'lbl2'添加到'borderpanel''p1'和'lbl3'和'txt1'到另一個'borderpanel''p2'。在這兩種情況下,你現在正在做的事情都是行不通的,因爲'p1'和'p2'不存在於你試圖訪問它們的範圍中。另外,類應該以'CamelCase'開頭,例如大寫字母。 'BorderPanel'和'BorderMain' –

+0

@ d.j.brown我正在嘗試將lbl1,lbl2添加到borderpanel p1,將其他添加到p2。我應該在borderpanel()類中實例化p1和p2 – norskdreamer

回答

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

那麼你可以有兩個字段LBL1和TXT1干將錯誤。然後可能使用frame.getContentPane()。add()方法的getters。而不是有lbl1,lbl2和lbl3,你可以改爲實例化邊界面板;與p1和p2。

1

由於您試圖訪問BorderPanel類中的BorderMain類中的變量,因此出現錯誤。你不能像這樣從另一個類的一個類中訪問變量。根據你的意見

我想添加lbl1,lbl2到borderpanel p1和其他到p2。

如果這是你真正需要做的事情,那麼不需要單獨的課程作爲BorderPanel。你可以這樣做。

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子類的東西。您也可以使用JPanel

相關問題