Search code examples
javaswingnetbeansnetbeans-platformjsplitpane

TopComponent resizing behavior


At the moment, when you try to manually resize a TopComponent, it will show a black line showing the future size of the TopComponent.

enter image description here

I'd like to know what is the JComponent behind this black line? And how can i access it?


EDIT

The first part of my question was answered. The component shown in the attached picture is a JSplitPane.

Right now, i'd like to be able to access it (i.e get the instance of the JSplitPane's used for TopComponent resizing in the netbeans platform.


Solution

    • there is JSplitPane,

    • but not sure if Netbeans is compiled in Java (in compare with Eclipse)

      EDIT I'd like to add a listener on it.

    • add PropertyChangeListener to the JSplitPane,

    • there are a few usefull methods for if (propertyName.equals(JSplitPane.XxxXxx))

    • notice for Nested JSplitPane, have to add listener for each of JSplitPanes separatelly

    • for example

    .

    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;
        }
    }