簡體   English   中英

Java:如何比較維度對象

[英]Java: How to compare Dimension objects

我正在嘗試將JButton的首選大小設置為相同的值。 基本上有兩個按鈕,根據哪個較大,我想將另一個設置為該大小。

問題是,我似乎無法正確比較維對象。 我將在下面粘貼我的代碼,但是我知道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);
        }

無論如何,只是一個簡單的問題。 嘗試使用各種方式谷歌搜索並且找不到答案,我敢肯定我在這里說錯了什么,但會有所幫助。

您不能使用><來比較大多數對象。 一些對象實現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);
}

Dimension對象具有寬度和高度。 您可以相互比較寬度或高度,但是一次比較兩個尺寸又意味着什么呢? 例如,如果一個是2x1,另一個是1x2,哪個更大? 它們具有相同的面積,但一個較高,另一個較大。

對於您的應用程序,我希望您對高度或寬度感興趣,因此您可以更改if語句以專注於此。 例如:

if (bnbSize.width > aobSizel.width)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM