Прежде всего, у вас есть большая ошибка в вашем коде, вы изменяете состояние без функции 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 ;
})}
Вот ссылка на рабочий код:
Вы не можете. Это был мой опыт, когда я пытался добиться того же.
Однако, если у вас есть весь пользовательский интерфейс на одной панели, которая находится в вашем фрейме, вы можете создать новый фрейм и добавить эту панель к фрейму. Не так уж и много работы.
Примерно так:
// 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 панель (и вообще любой экземпляр компонента) может быть только в одном кадре за раз, поэтому, когда вы добавляете его в новый кадр, он немедленно перестает быть в старых рамках.
Вы пытались вызвать Frame.dispose ()
, а затем изменить его? Сам не пробовал, но это может сработать.
Если нет, то что вы можете сделать, так это сделать фрейм несущественной частью класса, с минимальными зацепками для панели или панелей самого высокого уровня, и просто переместите их в новый фрейм. Все дети последуют за ним.
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.
В методе switchFullscreenMode ()
:
dispose();
...
setFullScreenWindow(...);
setUndecorated(true/false);
setBounds(mXPos, mYPos, mWidth, mHeight);
...
setVisible(true);
На самом деле происходит еще много всего, чтобы скрыть различные боковые панели, которые снова появляются, если мышь касается сторон.
Также обратите внимание, что вы должны явно установить границы. Window.setExtendedState (MAXIMIZED_BOTH)
плохо влияет на своевременную близость к dispose (), потому что оба они полагаются на несколько собственных событий операционной системы, которые теряются, если окно не может отображаться в эту долю секунды.
Я не рекомендую сразу брать экран по умолчанию:
GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice();
и вместо этого использовать экран, ваш JFrame в настоящее время включен: