我今天的问题涉及 JFace 中的一个简单争用TreeViewer
Composite
。我正在尝试将 a 附加ControlListener
到我的树的列以强制执行最小宽度。为此,我每次调整列大小时都会观察,如果新宽度太小,我会对其施加最小值。
这是一个 GUI 问题,但实际上它可能在任何带有修改侦听器的 Java 环境中发生。我想也许你们中的一些 Java 极客可能会从中获得乐趣。
public static void getSizeControlListener(final TreeColumn column, final int minSize) {
column.addControlListener(new ControlListener() {
@Override
public void controlMoved(ControlEvent e) {}
@Override
public void controlResized(ControlEvent e) {
if(column.getWidth()<minSize) {
column.setWidth(minSize);
}
}
});
一种可行的解决方案是添加一个在入口处设置的标志,任何嵌套调用都可以引用并在必要时立即退出。它有效,但它又脏又丑。
public static void getSizeControlListener(final TreeColumn column, final int minSize) {
column.addControlListener(new ControlListener() {
private boolean isRunning;
@Override
public void controlMoved(ControlEvent e) {}
@Override
public void controlResized(ControlEvent e) {
if(isRunning)
return;
isRunning = true;
if(column.getWidth()<minSize) {
column.setWidth(minSize);
}
isRunning = false
}
});