Разведчик Eclipse Neon две колонки с фиксированной шириной

У меня есть форма, и я хочу, чтобы она была организована в две колонки. Первый длинный и прокручиваемый, а другие должны всегда оставаться на правой стороне. Вторые столбцы должны быть небольшими по ширине, чтобы они не занимали слишком много места на экране.

мой код выглядит примерно так:

@Order(1000.0)
public class MainBox extends AbstractGroupBox {

    @Override
    protected TriState getConfiguredScrollable() {

      return TriState.FALSE;
    }

    @Order(1000.0)
    public class OfferBox extends SxAbstractGroupBox {

      @Override
      protected TriState getConfiguredScrollable() {

        return TriState.TRUE;
      }

      @Override
      protected int getConfiguredGridColumnCount() {

        return 1;
      }

      @Override
      protected int getConfiguredGridX() {

        return 0;
      }

      @Override
      protected int getConfiguredGridY() {

        return 0;
      }

      @Override
      protected double getConfiguredGridWeightX() {

        return 1; // This should stretch this box 
      }
      ......
    }

    @Order(4000.0)
    public class ShortCutBox extends AbstractGroupBox {

      @Override
      protected TriState getConfiguredScrollable() {

        return TriState.TRUE;
      }

      @Override
      protected int getConfiguredGridColumnCount() {

         return 1;
      }

      @Override
      protected int getConfiguredGridX() {

         return 1;
      }

      @Override
      protected int getConfiguredGridY() {

         return 0;
      }

     @Override
     protected double getConfiguredGridWeightX() {

        return 0; // this defined that box shouldn't stretch
     }

     @Override
     protected int getConfiguredWidthInPixel() {

         return 200;  // This should give me fix width 200
     }

     @Order(4100)
     public class MyButton1 extends AbstractButton {

     }

     @Order(4200)
     public class MyButton2 extends AbstractButton {

     }
     ....
  }
}

Но эти конфигурации дают макет как это:

Если я установил кнопки, чтобы иметь

@Override
protected int getConfiguredHorizontalAlignment() {

   return 1;
}

это выглядит правильно, но проблема в том, что поле все еще правое поле по-прежнему простирается над левым, поэтому прокрутка и щелчок по полям не работают с правой стороны на левой панели. (внутри черного прямоугольника)

Что мне не хватает?

1 ответ

Решение

Я только что посмотрел на вашу проблему, и я мог бы создать макет, который вы хотели бы сделать, выполнив следующие действия:

1. Я добавил getConfiguredGridW() метод, возвращающий 1 вашим двум групповым блокам, для достижения того, что каждый групповой блок будет охватывать только один столбец (родительский групповой блок имеет число столбцов сетки = 2).

2. Кроме того, я удалил getConfiguredGridX() и getConfiguredGridY() методы из обеих групповых блоков, потому что я думаю, что они не нужны, так как Скаут упорядочивает их таким образом автоматически, когда родительские групповые блоки getConfiguredGridColumnCount() возвращает 2 (или значение по умолчанию).

3.Это важный: в каждой кнопке я перезаписываю getConfiguredProcessButton() возвращая ложь (вместо истины по умолчанию), как я понял, скаут строит свою сетку по-другому, объявляя кнопки как непроцессорные кнопки. Документ Java также говорит:

Настраивает, является ли эта кнопка кнопкой процесса. Кнопки процесса обычно отображаются на специальной панели кнопок в нижней части формы. Необработанные кнопки могут быть размещены в любом месте формы. Подклассы могут переопределить этот метод. По умолчанию это правда.

4. Это необязательно: Добавить getConfiguredFillHorizontal() и верните true, чтобы все кнопки в правом групповом блоке увеличивали свою ширину до ширины родительского группового блока.

Вся моя аранжировка выглядит так:

@Order(1000.0)
public class MainBox extends AbstractGroupBox {

    @Override
    protected TriState getConfiguredScrollable() {

        return TriState.FALSE;
    }

    @Order(1000.0)
    public class OfferBox extends AbstractGroupBox {

        @Override
        protected TriState getConfiguredScrollable() {

            return TriState.TRUE;
        }

        @Override
        protected int getConfiguredGridColumnCount() {

            return 1;
        }

        @Override
        protected int getConfiguredGridW() {
            return 1;   // XXX: Added
        }

        /*
        // XXX: Removed
        @Override
        protected int getConfiguredGridX() {

            return 0;
        }

        @Override
        protected int getConfiguredGridY() {

            return 0;
        }
        */

        @Override
        protected double getConfiguredGridWeightX() {

            return 1; // This should stretch this box
        }

        @Override
        protected void injectFieldsInternal(OrderedCollection<IFormField> fields) {
            // Used to inject some dummy fields to enable scrolling
            for (int i = 0; i < 30; i++) {
                 // Add some fields here
            }
        }
    }

    @Order(4000.0)
    public class ShortCutBox extends AbstractGroupBox {

        @Override
        protected TriState getConfiguredScrollable() {

            return TriState.TRUE;
        }

        @Override
        protected int getConfiguredGridColumnCount() {

            return 1;
        }

        @Override
        protected int getConfiguredGridW() {
            return 1;   // XXX: Added
        }

        /*
        // XXX: Removed
        @Override
        protected int getConfiguredGridX() {

            return 1;
        }

        @Override
        protected int getConfiguredGridY() {

            return 0;
        }
        */

        @Override
        protected double getConfiguredGridWeightX() {

            return 0; // this defined that box shouldn't stretch
        }

        @Override
        protected int getConfiguredWidthInPixel() {

            return 200; // This should give me fix width 200
        }

        @Order(4100)
        public class MyButton1 extends AbstractButton {

            @Override
            protected String getConfiguredLabel() {
                return "Button 1";
            }

            @Override
            protected boolean getConfiguredProcessButton() {
                return false;   // XXX: Added
            }

            @Override
            protected boolean getConfiguredFillHorizontal() {
                return true; // XXX: This is optional
            }
        }

        @Order(4200)
        public class MyButton2 extends AbstractButton {

            @Override
            protected String getConfiguredLabel() {
                return "Button 2";
            }

            @Override
            protected boolean getConfiguredProcessButton() {
                return false;   // XXX: Added
            }

            @Override
            protected boolean getConfiguredFillHorizontal() {
                // XXX: This is optional. Enlarge buttons to group box width
                return true;
            }
        }
    }
}

Результат: Final Layout, пожалуйста, не обращайте внимания на оверлей полосы прокрутки;)

Пожалуйста, дайте мне знать, если это работает для вас!

С наилучшими пожеланиями, Матиас

Другие вопросы по тегам