2015-03-31 85 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)