【问题标题】:Jscrollpane in matlabmatlab中的Jscrollpane
【发布时间】:2016-09-10 01:36:18
【问题描述】:

我正在尝试在我的 matlab 代码中使用一些 java gui。 我想创建一个包含很多按钮的 Jpanel,并将这个 Jpanel 添加到 JscrollPane 以便能够在 Jpanel 中上下左右滚动。 我尝试使用 JavaComponent() 函数,如下所述:http://undocumentedmatlab.com/blog/javacomponent

这是我的代码:

[jpanel1, hpanel1] = javacomponent('javax.swing.JPanel');
[jButton1, hButton1] = javacomponent('javax.swing.JButton');
[jscroll, hscroll] = javacomponent('javax.swing.JScrollPane');

jButton1.setText('Click again!'); 
set(hButton1,'position',[5 5 50 50])
set(hpanel1,'position',[50 50 500 500],'BackgroundColor','white');
jpanel1.add(jButton1);
jscroll.add(jpanel1);

面板和按钮已创建,但我找不到滚动窗格,尝试将 jscroll 设置为可见但没有结果。 我错过了什么?

【问题讨论】:

    标签: swing matlab jscrollpane matlab-gui


    【解决方案1】:

    您只需要使用一次javacomponent 即可显示最外层的java 容器,即在您的情况下为JScrollPane。只需在 JPanel 容器中组装您的组件,然后将其传递给 JScrollPane 构造函数。

    请注意,使用javaObjectEDT 创建对象更安全,以便后续方法调用在 EDT - otherwise you could face a deadlock / race condition 上运行。

    最后,请注意如何为javacomponent 创建的容器使用getpixelposition'normalized' 单位,以使您的JScrollPane 填充整个父绘图区域,并在调整大小时表现得更好。

    jButton1 = javaObjectEDT('javax.swing.JButton', 'Button 1');
    jButton2 = javaObjectEDT('javax.swing.JButton', 'Button 2');
    jPanel = javax.swing.JPanel();
    jPanel.add(jButton1);
    jPanel.add(jButton2);
    jScrollPane = javax.swing.JScrollPane(jPanel);
    
    hFig = figure();
    hParent = uicontainer('Parent',hFig);
    parentPixelPos = getpixelposition(hParent);
    pos = [1,1,parentPixelPos(3),parentPixelPos(4)]; % fill the parent uicontainer completely
    [~, hContainer] = javacomponent(jScrollPane, pos, hParent);
    set(hContainer, 'Units', 'normalized');  % better behavior on resizing
    

    【讨论】:

      【解决方案2】:
      jscroll.add(jpanel1);
      

      您不应该将组件添加到滚动窗格。 JScrollPane 有自己的自定义布局管理器来显示滚动条和视口。

      因此,您需要将面板添加到视口:

      jscroll.setViewportView( jpanel1 );
      

      但是,这可能仍然不起作用,因为以下代码似乎正在尝试设置组件的大小/位置,这意味着正在使用空布局:

      set(hButton1,'position',[5 5 50 50])
      

      通常布局管理器负责确定组件的大小/位置,并且只有在面板的首选大小大于滚动窗格的大小时才会显示滚动窗格的滚动条。

      我不知道使用 MatLab 的好处是什么。我建议你只使用普通的 Swing。请参阅 Using Layout Managers 上的 Swing 教程中的示例。

      【讨论】:

      • 是的,你是对的,使用布局管理器更容易。谢谢
      猜你喜欢
      • 2012-02-02
      • 1970-01-01
      • 2015-11-19
      • 2011-05-11
      • 2013-12-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多