- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我在另一个 JPanels 结构复杂、代码多的项目中遇到了这个问题。
在那里我有以下片段
Point point = label.getLocation();
Point point2 = SwingUtilities.convertPoint(label.getParent(), point, panel);
其中标签和面板是动态选择的,JLabel 应该是 JPanel 的曾祖...-子。
那么为什么问题是在什么情况下 SwingUtilities.convertPoint()
如果源和目标具有父子关系,则可以返回负值?这可能吗?
此代码演示了负坐标问题,但 panel22 不是标签的父级。
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.Point;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
public class NegativeLocation {
public static void main(String[] args) {
new NegativeLocation();
}
public NegativeLocation() {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLayout(new BorderLayout());
JPanel panel1 = new JPanel() {
@Override
public Dimension getPreferredSize() {
return new Dimension(600, 400);
}
};
JPanel panel21 = new JPanel() {
@Override
public Dimension getPreferredSize() {
return new Dimension(300, 400);
}
};
panel1.add(panel21);
JPanel panel22 = new JPanel() {
@Override
public Dimension getPreferredSize() {
return new Dimension(300, 400);
}
};
panel1.add(panel22);
JPanel panel3 = new JPanel() {
@Override
public Dimension getPreferredSize() {
return new Dimension(300, 400);
}
};
panel21.add(panel3);
JLabel label = new JLabel("Label");
panel3.add(label);
frame.getContentPane().add(panel1);
frame.setPreferredSize(new Dimension(600, 400));
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
Point point = label.getLocation();
Point point2 = SwingUtilities.convertPoint(label.getParent(), point, panel21);
Point point3 = SwingUtilities.convertPoint(label.getParent(), point, panel22);
System.out.println(point2);
System.out.println(point3);
}
});
}
}
所以输出是
java.awt.Point[x=134,y=10]
java.awt.Point[x=134,y=-395]
UPD:基本上,我需要获取 label
相对于 panel21
的位置。如何修改此行以实现它?
Point point = label.getLocation();
Point point2 = SwingUtilities.convertPoint(label.getParent(), point, panel21);
最佳答案
对我来说这是正确的行为。想象一下。主面板包含一个位置为 x=0 y=100 的子面板。如果将主面板 0,0 点转换为子面板,它会返回 0,-100。事实上,哪个组件是哪个组件的父组件并不重要。逻辑是添加(全部减去)所有在父项呈现子项时应用于图形的 translate() 调用。
关于java - SwingUtilities.convertPoint() 返回负值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13759112/
我正在尝试了解这些方法的功能。你能给我提供一个简单的用例来理解它们的语义吗? 以文档为例,convertPoint:fromView:方法描述如下: Converts a point from the
我有一个名为RulerView的 View ,它有一个 subview : StickerImageView 这个ImageView包含图像,我可以在上面添加可移动的TextView。 现在我想要的是
我正在按照斯坦福大学类(class)学习 Swift 语言。第五讲有一个画笑脸的demo。 有faceCenter的声明,代码如下。 var faceCenter: CGPoint { ret
我试图弄清楚如何在 swift 游乐场中使用 UIView 的 convertPoint 函数。我没有得到我期望的结果,我不知道为什么。 当我尝试时: import UIKit let large =
我读过这个iPhone - Get Position of UIView within entire UIWindow和其他人多次,但就是无法让我的应用程序向我输出某物在屏幕上的绝对位置。 我有一个
我正在尝试同时学习 Swift 和 Cocoa。我有一个 NSView 的子类(实际上是 NSControl 的)。在这个子类中,我尝试运行以下行: self.convertPoint(aPoint:
我在另一个 JPanels 结构复杂、代码多的项目中遇到了这个问题。 在那里我有以下片段 Point point = label.getLocation(); Point point2 = Swing
我不太明白方法convertPoint:toView:。 在 Apple 的文档中写道 convertPoint:toView: Converts a point from the receiver’
所以我有一个自定义的 tableview,在那个 tableview 中我有一个按钮、一个图像和 2 个标签。这些项目中的每一个都使用 php 填充来自 mysql 服务器的 json 数据。我将我的
我对 SKNode 的方式有点困惑方法 convertPoint:fromNode:和 convertPoint:ToNode:正在工作,我已经查看了文档,但它们的作用并不那么明显。例如,这个(见下图
我已经查看了有关此主题的十几个 SO 问题,但没有一个答案对我有用。也许这会帮助我回到正确的道路上。 想象一下这个设置: 我想获取 UIButton 相对于 UIView 的 center 坐标。 也
我很高兴看到这个:answer for how to convert point of a subview它在模拟器上非常适合我。 但由于某种原因,它在设备上不起作用...会不会是设备对 View 位
我正在编写一个方法,它应该接收一个点:'in_centre',它将在当前 View 的坐标系中(也作为另一个参数传递:'target') 我需要将这个点转换成窗口坐标。 文档说我应该通过将这里的第二个
UIView 具有以下内容: - convertPoint:toView: - convertPoint:fromView: - convertRect:toView: - convertRect:f
请看下面的图片: 在这里,我想要将我的 UITextField C 透视图的 CGPoint 获取到主 UIViewController Z。我正在从主 UIViewController Z 转换它的
在这里,我从 Parse 检索了数据,并在 tableViewCell 中显示该数据。 override func tableView(tableView: UITableView, cellForR
我是一名优秀的程序员,十分优秀!