顶部组件的调整大小行为

3
目前,当您尝试手动调整TopComponent的大小时,它会显示一条黑线,显示TopComponent的未来大小。
我想知道这条黑线背后的JComponent是什么?我怎样才能访问它?
编辑
我的问题的第一部分已经得到了回答。附图所示的组件是JSplitPane。
现在,我想能够访问它(即在NetBeans平台中获取用于TopComponent调整大小的JSplitPane实例)。
1个回答

5
  • 有一个JSplitPane

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

    编辑我想在上面添加监听器。

  • 向JSplitPane添加PropertyChangeListener,

  • 有一些有用的方法可用于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;
    }
}

1
太好了,我认为这是JSplitPane.setContinuousLayout() - ignis
嗯,谢谢。我猜它是用Java写的:http://en.wikipedia.org/wiki/NetBeans。我想知道在公开的API中是否有任何方法可以获取用于顶部组件调整大小的JSplitPane。 - nathan
我想在它上面添加一个监听器。 - nathan
@mKorbel 感谢您提供的代码片段。我知道属性监听器,但目前我的问题是如何在调整顶部组件大小时获取 Netbeans RCP 使用的 JSplitPane。 - nathan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接