使视频可滚动
Make videos scrollable
我在表单中遇到滚动性问题,由 BoxLayout.y() 分层。
表单包含许多标签(固定大小),标签的每个标签可以包含图像或视频(视频在 BorderLayout 内以按标签大小缩放)。
如果显示图片,则上下滚动正常。
如果显示视频,y轴滚动是不可能的,我只能滑动切换标签。
我想这个问题的原因是视频是原生组件(我使用代号一 API 来显示视频)。
我该如何解决或解决这个问题?这对于应用程序设计至关重要。感谢您的提示。
video.setEnabled(false)
解决方法 () 不起作用。
我以不同的方式解决问题,将 MediaPlayer 容器插入 LayeredLayout 容器,然后在 MediaPlayer 上放置一个 Button。通用的空 Label 不起作用,但空 Button 起作用。当然,我必须重写 calcPreferredSize
以使 MediaPlayer 和 Button 具有相同的大小(或使用不同的方法使它们具有相同的大小)。
这允许滚动,但会阻止点击播放和暂停按钮(在视频上方)。我也解决了这个问题。
简而言之,这是我的解决方案,在模拟器上测试,Android和iOS(在下面的代码中,注意videoBtnsCnt
是视频上方的容器,其中我插入了播放和暂停按钮):
MediaPlayer mediaPlayer = new MediaPlayer(video) {
@Override
public Dimension getPreferredSize() {
return new Dimension(size, size);
}
};
Container mediaPlayerCnt = new Container(new LayeredLayout(), "NoMarginNoPadding") {
@Override
public Dimension getPreferredSize() {
return new Dimension(size, size);
}
};
mediaPlayerCnt.add(mediaPlayer);
Button allowScrollingLabel = new Button() {
@Override
public Dimension getPreferredSize() {
return new Dimension(size, size);
}
};
allowScrollingLabel.setUIID("NoMarginNoPadding");
allowScrollingLabel.addActionListener(l -> {
Component responder = videoBtnsCnt.getResponderAt(l.getX(), l.getY());
if (responder instanceof Button) {
// it can be a play button or a pause button
((Button) responder).pressed();
((Button) responder).released();
}
});
mediaPlayerCnt.add(allowScrollingLabel);
我在表单中遇到滚动性问题,由 BoxLayout.y() 分层。
表单包含许多标签(固定大小),标签的每个标签可以包含图像或视频(视频在 BorderLayout 内以按标签大小缩放)。
如果显示图片,则上下滚动正常。
如果显示视频,y轴滚动是不可能的,我只能滑动切换标签。
我想这个问题的原因是视频是原生组件(我使用代号一 API 来显示视频)。
我该如何解决或解决这个问题?这对于应用程序设计至关重要。感谢您的提示。
video.setEnabled(false)
解决方法 (
我以不同的方式解决问题,将 MediaPlayer 容器插入 LayeredLayout 容器,然后在 MediaPlayer 上放置一个 Button。通用的空 Label 不起作用,但空 Button 起作用。当然,我必须重写 calcPreferredSize
以使 MediaPlayer 和 Button 具有相同的大小(或使用不同的方法使它们具有相同的大小)。
这允许滚动,但会阻止点击播放和暂停按钮(在视频上方)。我也解决了这个问题。
简而言之,这是我的解决方案,在模拟器上测试,Android和iOS(在下面的代码中,注意videoBtnsCnt
是视频上方的容器,其中我插入了播放和暂停按钮):
MediaPlayer mediaPlayer = new MediaPlayer(video) {
@Override
public Dimension getPreferredSize() {
return new Dimension(size, size);
}
};
Container mediaPlayerCnt = new Container(new LayeredLayout(), "NoMarginNoPadding") {
@Override
public Dimension getPreferredSize() {
return new Dimension(size, size);
}
};
mediaPlayerCnt.add(mediaPlayer);
Button allowScrollingLabel = new Button() {
@Override
public Dimension getPreferredSize() {
return new Dimension(size, size);
}
};
allowScrollingLabel.setUIID("NoMarginNoPadding");
allowScrollingLabel.addActionListener(l -> {
Component responder = videoBtnsCnt.getResponderAt(l.getX(), l.getY());
if (responder instanceof Button) {
// it can be a play button or a pause button
((Button) responder).pressed();
((Button) responder).released();
}
});
mediaPlayerCnt.add(allowScrollingLabel);