【问题标题】:Swing + MigLayout, dynamic grow and shrinking of other componentsSwing + MigLayout,其他组件的动态增长和收缩
【发布时间】:2013-07-16 22:37:59
【问题描述】:

我希望让组件根据它们是否应该缩小或增长来划分可用的总空间。这应该是动态发生的,意思是;我没有关于添加到屏幕上的组件数量的任何信息。组件应根据其属性保持其高度或增长:

+++++++++++++++++++++++++++++++++
|   +-----------------------+   |
|   |       don't grow      |   |
|   +-----------------------+   |
|                               |
|   +-----------------------+   |
|   |                       |   |
|   |       growy           |   |
|   |                       |   |
|   +-----------------------+   |
|                               |
|   +-----------------------+   |
|   |       don't grow      |   |
|   +-----------------------+   |
|                               |
|   +-----------------------+   |
|   |       don't grow      |   |
|   +-----------------------+   |
|                               |
|   +-----------------------+   |
|   |                       |   |
|   |       growy           |   |
|   |                       |   |
|   +-----------------------+   |   
|                               |
|   +-----------------------+   |
|   |       don't grow      |   |
|   +-----------------------+   |
+++++++++++++++++++++++++++++++++

我能够创建以下结果:

提供如下SSCCE:

public class SimpleMain {

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                createAndShowGUI();
            }
        });
    }

    private static void createAndShowGUI() {
        JFrame frame = new JFrame("MigLayout");

        JPanel panel =  new JPanel(new MigLayout("debug, flowy", "grow", "grow"));

        // 1st set of textfields
        panel.add(new JTextField(), "shrink, growx, top");
        panel.add(new JTextField(), "grow, top");
        panel.add(new JTextField(), "shrink, growx, top");

        // 2nd set of textfields
        panel.add(new JTextField(), "shrink, growx, top");
        panel.add(new JTextField(), "grow, top");
        panel.add(new JTextField(), "shrink, growx, top");

        frame.getContentPane().add(panel);

        frame.pack();
        frame.setVisible(true);
    } 

}

第 2 和第 5 个文本字段按预期增长。尽管它们的容器没有“缩小”并且正在被处理以将其空间与其他组件分开,但其他组件仍保持其预期大小。第 2 和第 5 个文本字段应占用所有“额外”空间。

【问题讨论】:

    标签: java swing layout miglayout


    【解决方案1】:

    经过一些测试,我可能已经找到了适合我的问题中提到的要求的解决方案。

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                createAndShowGUI();
            }
        });
    }
    
    private static void createAndShowGUI() {
        JFrame frame = new JFrame("MigLayout");
    
        JPanel panel =  new JPanel(new MigLayout(new LC().debug(1000).flowY().fillX()));
    
        // 1rd set of components
        panel.add(new JLabel("Titel"), new CC().grow());
        panel.add(new JTextArea(), new CC().grow().push()); // this component can use all the extra space
    
        // 2st set of components
        panel.add(new JLabel("Titel"), new CC().grow());
        panel.add(new JTextField(), new CC().grow());
        panel.add(new JLabel("Description"), new CC().grow());
    
        // 3nd set of components
        panel.add(new JLabel("progress"), new CC().grow());
        panel.add(new JProgressBar(), new CC().grow());
        panel.add(new JTextArea(), new CC().grow().push()); // this component can use all the extra space
    
    
        frame.getContentPane().add(panel);
    
        frame.pack();
        frame.setVisible(true);
    } 
    

    结果:

    您可能会注意到,屏幕上的 2 个组件占据了所有额外空间,而其他组件则保持默认大小。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-02
      • 2016-12-04
      • 2010-12-07
      • 2012-04-01
      • 2018-06-09
      • 1970-01-01
      相关资源
      最近更新 更多