Разведчик 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, пожалуйста, не обращайте внимания на оверлей полосы прокрутки;)
Пожалуйста, дайте мне знать, если это работает для вас!
С наилучшими пожеланиями, Матиас