問題描述:
得到準確的寬度和高度值JelPanel類別外部存取它們可能具有挑戰性,特別是當這些值動態變化時,例如在視窗期間調整大小。本文探討了解決此問題的不同方法。
解決方案 1:自訂屬性變更偵聽器
可以實作自訂屬性變更偵聽器來監控 JPanel 寬度的變更和高度屬性。這種方法可以在更新值發生變化時直接存取它們。
import java.awt.event.PropertyChangeListener; import java.awt.event.PropertyChangeEvent; class JPanelWidthHeightListener implements PropertyChangeListener { private int width; private int height; public int getWidth() { return width; } public int getHeight() { return height; } @Override public void propertyChange(PropertyChangeEvent evt) { // PropertyChangeEvent e contains the target object (in this case, JPanel) if (evt.getPropertyName().equals("bounds")) { width = evt.getNewValue().getWidth(); height = evt.getNewValue().getHeight(); } } }
解決方案 2:匿名內部類別屬性變更監聽器
匿名內部類別屬性變更監聽器無需建立單獨的偵聽器類別。這種方法更加簡潔,並且仍然提供對更新的寬度和高度值的存取。
PropertyChangeListener pcl = new PropertyChangeListener() { @Override public void propertyChange(PropertyChangeEvent evt) { if (evt.getPropertyName().equals("bounds")) { int width = evt.getNewValue().getWidth(); int height = evt.getNewValue().getHeight(); } } };
解決方案3:從內部類別存取JPanel
如果存取JPanel如果需要在單獨的類別中,請考慮使用內部類別或匿名內部類。這允許直接存取 JPanel 的方法和屬性。
JPanel panel = new JPanel(); // Inner class that extends JPanel class MyInnerPanel extends JPanel { public int getMyWidth() { return getWidth(); } public int getMyHeight() { return getHeight(); } } // Anonymous inner class that extends JPanel JPanel anonymousPanel = new JPanel() { @Override public int getWidth() { return super.getWidth(); } @Override public int getHeight() { return super.getHeight(); } };
解 4:將 JPanel 作為參數傳遞
在某些情況下,將 JPanel作為參數傳遞給其他方法或類別可以允許直接存取其寬度和高度屬性,而不需要額外的偵聽器或內部
class MyExternalClass { public void doSomething(JPanel panel) { int width = panel.getWidth(); int height = panel.getHeight(); } }
結論:
取得類外JPanel 寬度和高度的方法選擇取決於應用程式的特定要求。自訂屬性變更偵聽器提供了一種靈活且集中的方式來監視更改,而內部類別和參數傳遞則提供了對 JPanel 屬性的更直接的存取。選擇最合適的解決方案可確保高效、可靠地存取更新的寬度和高度值。
以上是如何從 JPanel 類別之外取得其寬度和高度?的詳細內容。更多資訊請關注PHP中文網其他相關文章!