Java:如何比较Dimension对象

时间:2015-03-31 14:03:22

标签: java compare dimension

我试图将我的JButtons的首选大小设置为相同的东西。基本上有两个按钮,基于哪一个更大,我想将另一个设置为该大小。

问题是,我似乎无法获得比较维度对象的操作数。我将通过下面的代码,但我知道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);
        }

无论如何,只是一个简单的问题。尝试谷歌搜索它的每一个方向,无法找到答案,我确定我在那里措辞错误,但帮助将不胜感激。

2 个答案:

答案 0 :(得分:1)

您无法使用><来比较大多数对象。某些对象实现Comparable接口,可以与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大于d2
  • 0,如果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);
}

答案 1 :(得分:0)

Dimension对象同时具有宽度和高度。您可以相互比较宽度或高度,但一次比较两个尺寸意味着什么?例如,如果一个是2x1而另一个是1x2,那么更大?他们有相同的面积,但一个更高,另一个更宽。

对于您的应用程序,我希望您对高度或宽度感兴趣,因此您可以更改if语句以关注它。例如:

if (bnbSize.width > aobSizel.width)