今日の私の問題は、 JFace での単純な競合に関係していTreeViewer
Composite
ます。ControlListener
最小幅を強制するために、ツリーの列にa を付けようとしています。これを行うために、列のサイズが変更されるたびに監視し、新しい幅が小さすぎる場合は、最小値を課します。
これは 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);
}
}
});
有効な解決策の 1 つは、ネストされた呼び出しが参照できる開始時に設定されるフラグを追加し、必要に応じてすぐに終了することです。動作しますが、汚れていて醜いです。
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
}
});