我創建了幾個類來簡化像創建GUI,應用輔助功能設置,繪製圖形等過程,並且我已經走了很長的路;但我有一個想法,如果可以工作會很棒,我想知道是否有可能。在Java方法中傳遞未知類型的對象作爲參數
現在,我有一個「JFrameBuilder」類,以類似的方法:
/**
* The "addButton" method adds a button to a JFrame
* @param app The parent window (a JFrame)
* @param text The button text
* @param x The x-coordinate where the button should appear
* @param y The y-coordinate where the button should appear
* @param width The width of the button
* @param height The height of the button
* @return A JButton object (it returns an object so programs can manipulate it later)
*/
public JButton addButton(JFrame app, String text, int x, int y, int width, int height) {
try {
JButton button = new JButton();
button.setText(text);
button.setBounds(x, y, width, height);
app.add(button);
System.out.println("\"" + text + "\" button created.");
return button;
}catch(Exception e) {
System.out.println("Something went wrong when creating the \"" + text + "\" button.");
System.out.println(e.getStackTrace());
return null;
}
}
所以基本上所有它真的在做一種方法是設置多個屬性(無需編寫10-15行代碼每個對象)。這些工作很好,但我想進一步將其抽象化,這些方法可以與JApplet,JPanel和其他容器以及JFrame一起使用。這樣我可以將JFrameBuilder中的類推廣到更簡單的「AppBuilder」,「GUIBuilder」等,並且可以在其他項目中使用它。
但要做到這一點,我需要傳遞一個未知類型的對象作爲方法中的參數。所以我嘗試用「Object」替換「JFrame」,然後使用String來標識它的類型,並嘗試根據它進行更改。但是,我使用諸如「add」之類的方法遇到了一些麻煩;我在想這是因爲Object沒有添加方法(即使JPanel是對象類型和JPanel)。爲了澄清一點,基本上我需要做的是找出按鈕/標籤/任何應該添加的容器(「父母?」)。到目前爲止,我知道要做到這一點的唯一方法是將它作爲參數傳遞給方法;如果還有其他方法,我想要了解它,但是如果沒有,那麼理想地傳遞未知類型的變量似乎是最好的方法。這樣,在方法內部會有一些東西來標識類型,並根據它的下一個動作(例如,如果可以顯示其他對象,添加它,如果沒有,則捕獲異常)。
所以我檢查了這個網站上的類似問題(這實際上是我從中得到Object的想法),也搜索了一下,但沒有運氣。因此,我一如既往地欣賞任何建議或其他想法。
謝謝。 :)
你的JFrame從未在該方法中使用..和不在catch塊中返回null ..並且不要使用'setBounds' ..看看有很多關卡的swing繼承(這不是很好),但可能你可以找到像'JComponent' – nachokk
參數類型將取決於你想要做什麼。它可以和'Container'一樣基本,或者如果是頂級窗口然後是'Window'類型。我自己,我用我的GUI來創建JPanels,但不是頂級窗口。這樣我可以添加JPanels以添加到我喜歡的任何容器中。順便說一句'setBounds(....)'?不,不要這樣做。使用佈局管理器。 –