Java:如何比较Dimension对象
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()
应该return:
1
,如果d1
大于d2
0
,如果d1
等于d2
-1
,如果d1
小于d2
然后你应该在你的 class:
中创建比较器实例
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)
我正在尝试将我的 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()
应该return:
1
,如果d1
大于d2
0
,如果d1
等于d2
-1
,如果d1
小于d2
然后你应该在你的 class:
中创建比较器实例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)