首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Java JPanel和JFrame边框拖动

Java JPanel和JFrame边框拖动
EN

Stack Overflow用户
提问于 2018-09-18 20:40:30
回答 1查看 93关注 0票数 0

我正在打开一个包含以下内容的窗口:

代码语言:javascript
复制
JFrame clientFrame = new JFrame("Frame");
clientFrame.setLayout(new BorderLayout());
final JPanel client_panel = new JPanel();
client_panel.setLayout(new BorderLayout());
client_panel.add(new Applet());
client_panel.setPreferredSize(new Dimension(765, 555));
clientFrame.getContentPane().add(client_panel, "Center");
clientFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
clientFrame.pack();
clientFrame.setVisible(true);

相框上有一张随机的图片。

默认情况下,当您向上拖动底部边框时,它会自然地从图像底部删除。

同样,如果您向下拖动顶部边框,它将再次从图片的底部逐渐删除。

我如何交换它,让它从图片的顶部而不是底部移除?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-09-18 23:53:30

代码语言:javascript
复制
clientFrame.getContentPane().add(client_panel, "Center");

不要使用魔术值。人们不知道“中心”从何而来。使用API提供的变量:

代码语言:javascript
复制
clientFrame.getContentPane().add(client_panel, BorderLayout.CENTER);

据我所知,使用任何布局管理器都不可能实现您的要求。问题是布局管理器只知道组件可用的大小。它不知道为什么改变大小(例如,向上或向下拖动)。因此,布局管理器只能基于可用空间定义规则。

作为一个简单的测试,使用带有BorderLayoutJPanel。然后创建一个包含ImageIconJLabel。将标签添加到此面板,然后将面板添加到框架的内容窗格。

如果将标签添加到BorderLayout.CENTER,则图像会在可用空间居中,因此会丢失部分顶部和底部。

如果您将标签添加到BorderLayout.PAGE_START,则始终从组件的底部获取(或给予)空间。

如果您将标签添加到BorderLayout.PAGE_END,则始终从组件的顶部获取(或给予)空间。

如果您想要考虑框架的向上或向下拖动,那么解决方案就会变得复杂得多,因为您将需要向框架添加一个ComponentListener并处理componentResizedcomponentMoved方法。然后,您将需要跟踪帧的先前状态,然后确定哪些属性已更改,然后您将需要基于属性更改对图像进行自定义绘制,或者您将需要编写一个自定义布局管理器来感知属性更改。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52386818

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档