Java画布仅在大小上增加
我有一个JPanel,它的布局是BorderLayout,我在其中添加了一个画布,所以基本上画布应该填充JPanel,事实上这就是所发生的事情 现在的问题是调整大小,当我调整JPanel所在帧的大小时,画布的大小只会增加。我的意思是,如果我在运行后拖动鼠标来增加JFrame的大小,JPanel的大小和画布都会增加。但是如果我只减少画布的大小,它就会保持原来的大小 我确信这一点,因为我在面板中添加了一个listenner,这样它就可以在System.out中打印画布的大小 我需要这个为媒体播放器工作。。。在我决定把它缩小之前,它一直工作得很好。下面是代码:Java画布仅在大小上增加,java,swing,canvas,Java,Swing,Canvas,我有一个JPanel,它的布局是BorderLayout,我在其中添加了一个画布,所以基本上画布应该填充JPanel,事实上这就是所发生的事情 现在的问题是调整大小,当我调整JPanel所在帧的大小时,画布的大小只会增加。我的意思是,如果我在运行后拖动鼠标来增加JFrame的大小,JPanel的大小和画布都会增加。但是如果我只减少画布的大小,它就会保持原来的大小 我确信这一点,因为我在面板中添加了一个listenner,这样它就可以在System.out中打印画布的大小 我需要这个为媒体播放器工
public class NewJFrame extends javax.swing.JFrame {
EmbeddedMediaPlayerComponent media;
MediaPlayerFactory fact;
EmbeddedMediaPlayer player;
MediaListPlayer listPlayer;
MediaList list;
CanvasVideoSurface surface;
private EmbeddedMediaPlayerComponent media1;
SimpleDateFormat format = new SimpleDateFormat("kk:mm:ss.SSS");
Canvas cnv;
boolean done=false;
public NewJFrame() {
initComponents();
NativeLibrary.addSearchPath(
RuntimeUtil.getLibVlcLibraryName(), "C:\\Program Files\\VideoLAN\\VLC"
);
pnl.setLayout(new BorderLayout());
Native.loadLibrary(RuntimeUtil.getLibVlcLibraryName(), LibVlc.class);
media = new EmbeddedMediaPlayerComponent();
this.setLocation(100, 100);
this.setSize(200, 200);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true);
cnv = new Canvas();
cnv.setVisible(true);
pnl.setLayout(new BorderLayout());
pnl.add(cnv);
fact = new MediaPlayerFactory();
player = media.getMediaPlayer();
surface = fact.newVideoSurface(cnv);
player.setVideoSurface(surface);
media.getMediaPlayer().setVideoSurface(surface);
listPlayer = fact.newMediaListPlayer();
listPlayer.setMediaPlayer(player);
list = fact.newMediaList();
listPlayer.setMediaList(list);
listPlayer.setMode(MediaListPlayerMode.LOOP);
done=true;
}
private void pnlAncestorResized(java.awt.event.HierarchyEvent evt) {
// TODO add your handling code here:
if(done){
System.out.println("x " + cnv.getWidth() + " y " + cnv.getHeight());
}
}
PS:我不确定是否需要BorderLayout,我认为默认情况下,添加组件时会占用其所有容器空间。。。如果我也能得到答案的话
更新:我尝试了这个解决方案,但它奏效了,不知道为什么设置最小大小会奏效
谢谢你1你会想要创建并发布一个非常小的,事实上,我们可以运行、测试并希望改进它。2出于好奇,你为什么要使用画布,AWT组件和Swing GUI?2因为媒体播放器只在画布上绘制,我试着用AWT面板来做,但还是一样result@HovercraftFullOfEels1一