Принудительное изменение размера JFrame после того, как setResizable (false) не работает [duplicate]

1

У меня проблемы с работой. Я создал игру, в которой у меня есть питание, которое позволяет изменять размер окна на несколько секунд. Все работает отлично, и окно идет от того, чтобы не изменять размер, чтобы быть изменчивым в течение нескольких секунд. То, что должно было произойти, после нескольких секунд, окно должно прекратить принимать входные данные для изменения размера окна (IE: не следует изменять размер). Единственная проблема заключается в том, что всякий раз, когда он должен быть настроен на неизменяемость, если вы держите курсор в окне, чтобы изменить его размер, он сохраняет размер. После того, как вы отпустите окно, он активирует состояние без изменения размера окна. Мой вопрос: как мне это сделать, прежде чем вы отпустите окно, убрав контроль над изменением размера, как только таймер будет поднят?

Вот упрощенный случай: (вам предоставляется 6 секунд, чтобы изменить размер окна и играть с ним)

package test;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JFrame;
import javax.swing.Timer;


public class Test {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {        
        JFrame testFrame = new JFrame();
        testFrame.setResizable(true);
        testFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        long endingTime = System.currentTimeMillis() + 6000;
        Timer testTimer = new Timer(100, new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
                if((endingTime - System.currentTimeMillis()) < 0){
                    testFrame.setResizable(false);
                }
            }

        });
        testFrame.setVisible(true);
        testTimer.start();
    }

}
  • 2
    Это дубликат вашего предыдущего вопроса или вы спрашиваете что-то другое?
  • 0
    Я предоставляю код, предложенный для более быстрых и лучших ответов. Первый вопрос был сформулирован плохо, и в нем не было нескольких важных деталей. У него не было вспомогательного кода, и, следовательно, не было возможности правильно ответить. Я бы снял его, если бы мог.
Показать ещё 7 комментариев
Теги:
resize
swing

1 ответ

1
Лучший ответ

Используйте класс Java Robot чтобы заставить выпустить мышь. Я изменил ваш пример кода ниже:

public static void main(String[] args) {        
    JFrame testFrame = new JFrame();
    testFrame.setResizable(true);
    testFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    Timer testTimer = new Timer(6000, new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e) {
                testFrame.setResizable(false);
          Robot r;
          try {
            r = new Robot();
            r.mouseRelease( InputEvent.BUTTON1_DOWN_MASK);
          } catch (AWTException ex) {
            ex.printStackTrace();
          }
        }

    });
    testFrame.setVisible(true);
    testTimer.start();
}
  • 0
    Это отлично сработало @ Quicksilver002! Это кажется немного неэффективным, поскольку насильственно завладевает мышью, вместо того, чтобы заставить программу просто ограничивать вас в ее изменении, но пока это кажется единственным возможным способом. Отличная работа, и большое спасибо. PS: Если вы хотите, пожалуйста, дайте ответ, который вы предоставили здесь: stackoverflow.com/q/29321523/4543762, чтобы другие посетители могли найти правильный ответ. Еще раз спасибо за вашу помощь!
  • 0
    Хорошо, я тоже там разместил. Вы можете сделать его более эффективным, не создавая робота каждый раз (очевидно). Но я не думаю, что на самом деле использование робота требует много накладных расходов.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню