java - 在 JPanel 中滚动 JFrame
问题描述
我用这个例子来绘制多边形作为基础来制作我自己的多边形抽屉,但保留了最重要的部分:
public class Main extends JPanel {
public void paintComponent(Graphics g) {
super.paintComponent(g);
// polygon maker
}
public static void main(String[] args) {
JFrame frame = new JFrame();
frame.setTitle("DrawPoly");
frame.setSize(1000, 1000);
frame.setLocationRelativeTo(null);
frame.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
Container contentPane = frame.getContentPane();
contentPane.add(new Main());
frame.show();
}
}
我发现如果多边形具有负坐标值,它们就会离开屏幕,而我无法看到它们的整体。为此,我想象某种滚动或缩放到在主内部创建的 JFrame,或者可能到内容窗格。如何使用链接代码作为基础实现简单的滚动?
解决方案
我发现如果多边形的坐标值为负,它们就会离开屏幕
您不能使用具有负值的 JScrollPane。
相反,您需要:
- 创建所有要绘制的多边形并将它们添加到 ArrayList。
- 遍历 ArrayList 以找到所有多边形的最大负 x/y 值
- 如果您发现负的“x”或“y”坐标,则再次遍历 ArrayList 并
translate(...)
通过 x 或 y 坐标的绝对值调用该方法,以将面板上的所有多边形移动到它们都将可见 - 最后,您遍历 ArrayList 并绘制每个多边形。
笔记。理想情况下,您将创建多边形并添加,然后在 paintComponent() 方法之外执行 ArrayList。然后进行翻译。所以现在 paintComponent() 方法只需要迭代 ArrayList 并绘制它们,而无需在每次组件需要重新绘制自身时进行创建/翻译。
推荐阅读
- git - 将主分支与开发同步
- visual-studio - ASP.NET Core 启动设置:IIS Express、IIS、项目、可执行文件
- android - 饼图显示剪切窗口属性更改未反映在使 videoview 全屏
- python - 计算模式同时忽略某些值
- apache - 使用 .htaccess 删除 URl 的某些部分?
- xamarin - 无法将类型“System.Windows.Input.ICommand”隐式转换为“Xamarin.Forms.Command”
- linux - dotnet restore 在配置有代理的 bitbucket 管道上失败
- c# - 在 Unity 中为我的 3d 模型添加动画?
- java - 这个数组“菜单”的作用是什么?我知道构造函数是如何工作的,但不确定为什么这个数组“菜单”与类名相同
- javascript - 单击视口中可见的按钮