【问题标题】:TopComponent resizing behaviorTopComponent 调整大小行为
【发布时间】:2012-10-19 13:28:15
【问题描述】:

目前,当您尝试手动调整 TopComponent 的大小时,它将显示一条黑线,表示该 TopComponent 的未来大小。

我想知道这条黑线后面的JComponent 是什么?我怎样才能访问它?


编辑

我的问题的第一部分得到了回答。附图中显示的组件是JSplitPane

现在,我希望能够访问它(即获取用于在 netbeans 平台中调整 TopComponent 大小的 JSplitPane 的实例。

【问题讨论】:

    标签: java swing netbeans netbeans-platform jsplitpane


    【解决方案1】:
    • JSplitPane

    • 但不确定 Netbeans 是否用 Java 编译(与 Eclipse 相比)

      编辑I'd like to add a listener on it.

    • 将 PropertyChangeListener 添加到 JSplitPane,

    • if (propertyName.equals(JSplitPane.XxxXxx))有几个有用的方法

    • 嵌套 JSplitPane 的注意事项,必须为每个 JSplitPane 单独添加监听器

    • 例如

    .

    import java.awt.Dimension;
    import java.awt.GridLayout;
    import java.beans.PropertyChangeEvent;
    import java.beans.PropertyChangeListener;
    import javax.swing.JFrame;
    import javax.swing.JPanel;
    import javax.swing.JScrollPane;
    import javax.swing.JSplitPane;
    import javax.swing.JTable;
    
    public class JSplitPaneToy {
    
        public static void main(String[] args) {
            JSplitPane sp = new JSplitPane(JSplitPane.VERTICAL_SPLIT, makePanel(), makePanel());
            JPanel pnl = new JPanel();
            pnl.setLayout(new GridLayout(4, 1, 10, 10));
            pnl.add(makePanel());
            pnl.add(makePanel());
            pnl.add(makePanel());
            pnl.add(makePanel());
            PropertyChangeListener propertyChangeListener = new PropertyChangeListener() {
    
                public void propertyChange(PropertyChangeEvent changeEvent) {
                    JSplitPane sourceSplitPane = (JSplitPane) changeEvent.getSource();
                    String propertyName = changeEvent.getPropertyName();
                    if (propertyName.equals(JSplitPane.LAST_DIVIDER_LOCATION_PROPERTY)) {
                        int current = sourceSplitPane.getDividerLocation();
                        System.out.println("Current: " + current);
                        Integer last = (Integer) changeEvent.getNewValue();
                        System.out.println("Last: " + last);
                        Integer priorLast = (Integer) changeEvent.getOldValue();
                        System.out.println("Prior last: " + priorLast);
                    }else if (propertyName.equals(JSplitPane.RESIZE_WEIGHT_PROPERTY)) {
                        int current = sourceSplitPane.getDividerLocation();
                        System.out.println("Current: " + current);
                        Integer last = (Integer) changeEvent.getNewValue();
                        System.out.println("Last: " + last);
                        Integer priorLast = (Integer) changeEvent.getOldValue();
                        System.out.println("Prior last: " + priorLast);
                    }
                }
            };
            sp.addPropertyChangeListener(propertyChangeListener);
            JFrame frame = new JFrame("JSplitPane Toy");
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frame.setLayout(new GridLayout(0, 2, 10, 10));
            frame.add(sp);
            frame.add(pnl);
            frame.pack();
            frame.setVisible(true);
        }
    
        private static JScrollPane makePanel() {
            JScrollPane pane = new JScrollPane(new JTable(
                    new Object[][]{{0, 1, 2}, {1, 2, 3}, {2, 3, 4}}, new Object[]{1, 2, 3}));
            pane.setPreferredSize(new Dimension(200, 100));
            return pane;
        }
    }
    

    【讨论】:

    • 是的,我想是JSplitPane.setContinuousLayout()
    • 嗯。谢谢。我猜它是用java写的:en.wikipedia.org/wiki/NetBeans。我想知道暴露的 API 中是否有任何东西可以让 JSplitPane 用于顶部组件的大小调整。
    • 我想在上面添加一个监听器。
    • @mKorbel 感谢这段代码。我知道属性监听器,但我的问题 atm 是如何在调整顶级组件大小时获取 Netbeans RCP 使用的 JSplitPane。
    猜你喜欢
    • 2012-05-27
    • 1970-01-01
    • 2011-02-18
    • 2013-08-01
    • 2010-11-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多