2017-09-02 78 views
1

描述:我一直在研究這個小項目,我需要根據傳遞的參數(1-4)將一個特定的JPanel從一個類發送到主JFrame。 。在我的主課堂中,我設置了一個JFrame,以便我可以直觀地檢查正在傳遞的面板。將JPanel添加到JFrame失去組織組件的能力 - Java

什麼行不通

裏面的「訪問器類」,我似乎無法在面板的中間位置到JComboBox的。另外,我不太確定我可以做任何類型的定位。我之前使用完全相同的代碼實現了一個按鈕(我替換了JComboBox),我也無法調整按鈕大小。但是...我可以改變它的顏色。

GridBagLayout應該以默認值爲中心。爲什麼這被覆蓋?如果您查看提供的圖片/鏈接,它會自動轉到頂部中心。我根本無法移動它。

這個問題是我從班級接收JPanel的方式的結果。有沒有更好的方式可以稱爲面板?

對不起,缺乏清晰度。努力領悟Java中的一些基本概念。

任何幫助表示讚賞。

這是主要的類

public static void main(String[] args) { 
    Accessor accessorOne = new Accessor(1); //Creates the Panel with param 1 
    JFrame frame = new JFrame("Testing"); 
    frame.setLayout(new GridLayout(2,2)); 
    frame.add(new JButton("Button 2")); 
    frame.add(new JButton("Button 3")); 
    frame.add(new JButton("Button 4")); 
    frame.add(accessorOne); //Adds the Panel to the last spot in the JFrame 
    frame.setSize(650, 600); 
    frame.setVisible(true); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
} 

這是 「訪問器」 類定義面板

public class Accessor extends JPanel{ 

JPanel panel = new JPanel(); 

public Accessor(int num){ 

    if(num == 1){ 
    panel.setLayout(new GridBagLayout()); 
    String[] choice1 = {"Testing One", "Testing two" }; 
    JComboBox choiceBoxOne = new JComboBox(choice1); 
    choiceBoxOne.setBackground(Color.red); //These changes are correctly reflected! 
    panel.add(choiceBoxOne); 
    choiceBoxOne.setLocation(300,300); //ERROR -> Setting this value changes nothing! 
    add(panel); 
    } 
    // Other num options 
} 
} 

This is the photo of the Jframe

+0

經過一些更多的測試後,它必須是我從其他類調用jpanel的方式。如果我在主要方法中直接設置面板,則所有佈局都可以正常工作。 – ghujkil2

+0

Dude,由於Accessor類正在擴展JPanel,爲什麼要創建一個JPanel類?您應該將choiceBoxOne添加到Accessor類而不是您的JPanel對象。而且,您應該將Layout設置爲Accessos類,而不是JPanel對象。 –

回答

0

問題是您在類Accessor中使用panel(也是默認佈局爲FlowLayout的面板)。因此,您可以不使用另一個面板實例,而只使用GridBagLayout實例Accessor,並直接將控件添加到Accessor而不是新的panel

再次絕對定位適用於null佈局(不推薦)。

另外不要忘記使用GridBagConstraints以及GridBagLayout