2016-01-24 190 views
1

我有我添加的框架JFrame gui JPanel由多個不同的JPanel組成,其中一個在不同的類中。將JPanel從一個類添加到另一個類中的JPanel

的問題是我不能說其他類的JPanel添加到我的GUI的JPanel我沒有得到任何錯誤,但顯示

PurchaseStock.java

guiC.gridx=0; 
    guiC.gridy=0; 
    gui.add(StockDropdown.getP(), guiC); 

    guiC.gridx=1; 
    guiC.gridy=0; 
    gui.add(quantityP, guiC); 

    guiC.insets = new Insets(30,0,0,0); 
    guiC.gridwidth=2; 
    guiC.gridx=0; 
    guiC.gridy=1; 
    gui.add(checkout, guiC); 

    frame.add(gui); 
    frame.pack(); //Size to components 

    frame.setResizable(false); 
    frame.setVisible(true); 

StackDropdown.java什麼

public class StockDropdown { 

    private static JPanel ui = new JPanel(new BorderLayout()); 
    private JButton bt = new JButton("tsfdsfds"); 
    private JPanel top = new JPanel(); 
    private JPanel middle = new JPanel(); 


    public StockDropdown(){ 
     ui.add("North", top); 
     top.add(bt); 
    } 
    public static JPanel getP(){ 
     return ui; 
    } 

} 

更新:

PurchaseStock.java

public class PurchaseStock extends JFrame implements ActionListener { 
    JFrame frame = new JFrame(); 

    JPanel gui = new JPanel(new GridBagLayout()); 
    GridBagConstraints guiC = new GridBagConstraints(); 

    public PurchaseStock(){ 
     frame.setTitle("Update Stock"); 
     frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); 


     guiC.gridx=0; 
     guiC.gridy=0; 
     gui.add(new StockDropdown(), guiC); 


     frame.add(gui); 
     frame.pack(); //Size to components 

     frame.setResizable(false); 
     frame.setVisible(true); 
    } 


} 

StackDropdown.java

package stock; 

import java.awt.BorderLayout; 
import javax.swing.JButton; 
import javax.swing.JPanel; 

public class StockDropdown extends JPanel{ 

    private JPanel ui = new JPanel(new BorderLayout()); 
    private JButton bt = new JButton("tsfdsfds"); 
    private JPanel top = new JPanel(); 
    private JPanel middle = new JPanel(); 


    public StockDropdown(){ 

     ui.add("North", top); 
     top.add(bt); 

    } 


} 

更新2:

StockDropdown.java

package stock; 

import java.awt.BorderLayout; 
import java.awt.Dimension; 
import java.awt.Image; 
import javax.swing.ImageIcon; 
import javax.swing.JButton; 
import javax.swing.JComboBox; 
import javax.swing.JLabel; 
import javax.swing.JPanel; 

public class StockDropdown extends JPanel{ 
    private JComboBox itemsDropdown = new JComboBox(); 

    private JPanel top = new JPanel(); 
    private JPanel middle = new JPanel(); 
    JButton t = new JButton("tt"); 

    public StockDropdown(){ 

     add("North", top); 
     add("Center", middle); 
     top.add(itemsDropdown); 

     for(String key : StockData.getStock().keySet()) { 
     itemsDropdown.addItem(StockData.getName(key)); 
     } 
     middle.add(t); 

    } 

    private ImageIcon setImageSize(String path) { 
     ImageIcon image1 = new ImageIcon(path); 
     Image image2 = image1.getImage().getScaledInstance(100,100,0); 
     return new ImageIcon(image2); 
    }; 

} 

回答

2

你確實得到了另一個JPanel,但是你沒有添加任何內容,因爲組件被添加到它的構造函數中,而StockDropdown構造函數從不被調用。除非你打算創建一個真正有效的靜態工廠方法,而是調用相應的構造函數,否則我會擺脫靜態字段和方法。

例如,

import javax.swing.*; 

public class StockDropdown extends JPanel { 
    private JButton bt = new JButton("tsfdsfds"); 
    private JPanel top = new JPanel(); 
    private JPanel middle = new JPanel(); 

    // make this private if using factory method 
    private StockDropdown(){ 
     add("North", top); 
     top.add(bt); 
    } 

    // public static factory method 
    public static StockDropdown getInstance() { 
     StockDropdown ui = new StockDropdown(); 
     return ui; 
    } 
} 

注意,如果StockDropdown擴展JPanel,擺脫了UI的變量,因爲有了它,你將組件添加到一個沒有被顯示的容器:

public class StockDropdown extends JPanel { 
    private JButton bt = new JButton("tsfdsfds"); 
    private JPanel top = new JPanel(); 
    private JPanel middle = new JPanel(); 

    public StockDropdown() { 
     setLayout(new BorderLayout()); 
     top.add(bt); 
     // add("North", top); 
     add(top, BorderLayout.PAGE_START); 
    } 
} 
+0

我可以以某種方式將所有這些只是在構造函數中?那麼我可以調用gui.add(new StockDropdown())? – Higeath

+0

@Higeath:是的,這就是我需要的路線,**如果** StockDropdown擴展了JPanel。如果不是,你需要'gui.add(new StockDropdown()。getUi());'並且使用ui作爲實例字段。 –

+0

這樣我就增加了擴展JPanel改成了gui.add(new StockDropdown()); public StockDropdown(){ ui.add(「North」,top); top.add(bt);}沒有錯誤是如此之多,但我仍然看不到按鈕 – Higeath

相關問題