Поверните JLabel Swing

То, что вы пытаетесь сделать, не сработает, потому что вы пытаетесь преобразовать переменную в код PHP. PHP не знает, что это ваше намерение, и не выполняет этот код.

PHP имеет конструкцию eval(), которая позволяет вам сделать это.

Внимание. Языковая конструкция eval () очень опасна, поскольку она позволяет выполнять произвольный код PHP. Таким образом, его использование не рекомендуется. Если вы тщательно проверили, что нет другого выбора, кроме как использовать эту конструкцию, обратите особое внимание на то, чтобы не передавать какие-либо данные, предоставленные пользователем, без надлежащей проверки их заранее.

blockquote>

Руководство по PHP для для eval объясняет больше.

Оценить строку как код PHP

blockquote>

В вашем случае будет работать следующий код.

$nested_array_selectors = '["my_array"]["my_key"]["my_elemnt"]';
eval('var_dump($my_instance->my_object' . $nested_array_selectors . ')');

7
задан Joey 4 February 2019 в 14:03
поделиться

2 ответа

Я заставил это работать теперь с небольшой справкой коллеги. В основном у меня теперь есть поле, которое указывает, подкачать ли высоту/ширину, которая только активна в течение времени когда оригинал JLabel делает его рисование.

private boolean needsRotate;

@Override
public Dimension getSize() {
  if (!needsRotate) {
    return super.getSize();
  }

  Dimension size = super.getSize();

  switch (getDirection()) {
  case VERTICAL_DOWN:
  case VERTICAL_UP:
      return new Dimension(size.height, size.width);
  default:
    return super.getSize();
  }
}

@Override
public int getHeight() {
  return getSize().height;
}

@Override
public int getWidth() {
  return getSize().width;
}

@Override
protected void paintComponent(Graphics g) {
  Graphics2D gr = (Graphics2D) g.create();

  switch (getDirection()) {
  case VERTICAL_UP:
    gr.translate(0, getSize().getHeight());
    gr.transform(AffineTransform.getQuadrantRotateInstance(-1));
    break;
  case VERTICAL_DOWN:
    gr.transform(AffineTransform.getQuadrantRotateInstance(1));
    gr.translate(0, -getSize().getWidth());
    break;
  default:
  }

  needsRotate = true;
  super.paintComponent(gr);
  needsRotate = false;
}
8
ответ дан 6 December 2019 в 21:20
поделиться

Я думаю, что это выключено, потому что Вы переводите о неправильной точке.

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

если у Вас есть эта маркировка в ЦЕНТРЕ BorderLayout, размер всегда является полным размером контейнера (минус north+south высота минус east+west ширина)

разве Вы не должны переводить о фактическом размере, не предпочтенном размере?

0
ответ дан 6 December 2019 в 21:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: