2015-03-31 97 views
0

我想設置我的JButtons的首選尺寸爲同一件事。基本上有兩個按鈕,並基於哪一個更大,我想設置其他的大小。Java:如何比較尺寸對象

問題是,我似乎無法獲得操作數比較維對象的權利。我會在下面通過我的代碼,但我知道if語句不起作用。如果有人能夠真正快速填滿我,這將是非常棒的。

ballotNameButton = new JButton("<html><center>Edit<br>Ballot Name</center></html>"); 
     addOfficeButton = new JButton("<html><center>Add<br>Office</center></html>"); 
     Dimension bnbSize = ballotNameButton.getPreferredSize(); 
     Dimension aobSize = addOfficeButton.getPreferredSize(); 
     if(bnbSize > aobSize){ 
      addOfficeButton.setPreferredSize(bnbSize); 
     }else if(aobSize > bnbSize){ 
      ballotNameButton.setPreferredSize(aobSize); 
     } 

反正只是一個簡單的問題。試圖Google搜索它的每一個方式,找不到答案,我敢肯定,我在那裏錯了一些錯誤,但幫助將不勝感激。

回答

0

您不能使用><來比較大多數對象,如你的意思。一些對象實現了接口,並且可以與compareTo()方法進行比較。如果這是java.awt.Dimension,則它不會執行Comparable,因此您必須創建自定義Comparator並定義要比較的字段。

例如,如果你想比較基礎上的區域爲對象,代碼將是這樣的:

class DimensionComparator implements Comparator<Dimension> { 
    private static double area(Dimension d) { 
     return d.getWidth() * d.getHeight(); 
    } 

    public int compare(Dimension d1, Dimension d2) { 
     return Double.compare(area(d1), area(d2)); 
    } 
} 

的方法compare()應該返回:

  • 1,如果d1如果d1等於d2
  • -1,如果d1小於d2

那麼你應該建立比較實例的類中:

private static Comparator<Dimension> dimComparator = new DimensionComparator(); 

並使用compare()比較的對象:

if (dimComparator.compare(bnbSize, aobSize) > 0) { 
    addOfficeButton.setPreferredSize(bnbSize); 
} else if (dimComparator.compare(aobSize, bnbSize) > 0) { 
    ballotNameButton.setPreferredSize(aobSize); 
} 

如果你只是想比較一個特定的領域,如身高,只要做:

if (bnbSize.getHeight() > aobSize.getHeight()) { 
    addOfficeButton.setPreferredSize(bnbSize); 
} else if (aobSize.getHeight() > bnbSize.getHeight()) { 
    ballotNameButton.setPreferredSize(aobSize); 
} 
+0

謝謝你對這兩個答案。單獨直接比較高度和寬度可能會佔用很多額外的編碼空間,因爲我最終不會只有兩個按鈕。所以我想我會和那個比較類一起去。謝謝。 – user2223059 2015-03-31 14:26:30

0

Dimension對象具有寬度和高度。您可以將寬度或高度相互比較,但是一次比較兩個維度的含義是什麼?例如,如果一個是2x1,另一個是1x2,哪個更大?他們有相同的面積,但一個更高,另一個更寬。

對於你的應用程序,我希望你對高度或寬度感興趣,所以你可以改變你的if語句來關注它。例如:

if (bnbSize.width > aobSizel.width)