Как назвать setUndecorated () после того, как кадр сделан видимым?

Прежде всего, у вас есть большая ошибка в вашем коде, вы изменяете состояние без функции setState (). Поэтому удалите эту строку кода:

this.state.list.push(i);

Далее вам нужно получить значение ввода и проверить, имеет ли оно значение Falsey (0, пустая строка, ноль). Если это так, вы предотвращаете поведение по умолчанию и возвращаетесь из функции. Вы можете извлечь значение из e.target.value

pressEnter = e => {
   var i = this.state.input;
    let value = e.target.value;
    if (e.which === 13) {
      if (!value) {
        e.preventDefault();
        return;
     }

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

  this.setState({
    //    list : l,
    list: [...this.state.list, value], // this is a new array
    input: ""
  });

В конце вам также нужно добавить уникальный ключ к элементам 'ul'. Вы можете использовать индекс элемента в списке.

  {list.map((data, index) => {
    return 
  • data
  • ; })}

    Вот ссылка на рабочий код:

    https://codesandbox.io/s/5y0747y7yp

    21
    задан Ferrrmolina 6 May 2015 в 04:24
    поделиться

    4 ответа

    Вы не можете. Это был мой опыт, когда я пытался добиться того же.

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

    Примерно так:

    // to start with
    JPanel myUI = createUIPanel();
    JFrame frame = new JFrame();
    frame.add(myUI);
    
    // .. and later ...
    
    JFrame newFrame = new JFrame();
    newFrame.setUndecorated();
    newFrame.add(myUI);
    

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

    17
    ответ дан 29 November 2019 в 06:23
    поделиться

    Вы пытались вызвать Frame.dispose () , а затем изменить его? Сам не пробовал, но это может сработать.

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

    25
    ответ дан 29 November 2019 в 06:23
    поделиться

    Well, you are going to need different frame instance. You may be able to move the contents of your frame over without recreating that. The key here is to make your code not be reliant on a specific frame. This is a basic good practice in any case.

    2
    ответ дан 29 November 2019 в 06:23
    поделиться

    Взгляните на https://tvbrowser.svn.sourceforge.net/svnroot/tvbrowser/trunk/ tvbrowser / src / tvbrowser / ui / mainframe / MainFrame.java

    В методе switchFullscreenMode () :

    dispose();
    ...
    setFullScreenWindow(...);
    setUndecorated(true/false);
    setBounds(mXPos, mYPos, mWidth, mHeight);
    ...
    setVisible(true);
    

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

    Также обратите внимание, что вы должны явно установить границы. Window.setExtendedState (MAXIMIZED_BOTH) плохо влияет на своевременную близость к dispose (), потому что оба они полагаются на несколько собственных событий операционной системы, которые теряются, если окно не может отображаться в эту долю секунды.

    Я не рекомендую сразу брать экран по умолчанию:

    GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice();
    

    и вместо этого использовать экран, ваш JFrame в настоящее время включен:

    12
    ответ дан 29 November 2019 в 06:23
    поделиться
    Другие вопросы по тегам:

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