Java Обновление экрана - PullRequest
       20

Java Обновление экрана

2 голосов
/ 21 апреля 2010

У меня есть экран, на котором один из его компонентов становится невидимым в зависимости от логического значения. Если логическое значение изменяется после создания экрана, как мне обновить экран, чтобы принять это во внимание?

Ответы [ 4 ]

3 голосов
/ 21 апреля 2010

Я думаю, revalidate () здесь более уместно, если вы имеете дело с JComponents.

Из JavaDoc:

Поддерживает отложенное автоматическое размещение.

Вызовы делают недействительными, а затем добавляет validateRoot этого компонента в список компонентов, которые необходимо проверить. Проверка произойдет после того, как будут отправлены все ожидающие в данный момент события. Другими словами, после вызова этого метода будет проверен первый валидатор validateRoot (если есть), найденный при переходе вверх по иерархии содержимого этого компонента. По умолчанию JRootPane, JScrollPane и JTextField возвращают true из isValidateRoot.

Этот метод будет автоматически вызываться для этого компонента, когда значение свойства изменяется таким образом, что это влияет на размер, расположение или внутреннюю компоновку этого компонента. Это автоматическое обновление отличается от AWT, потому что программам больше не нужно вызывать validate для получения содержимого графического интерфейса для обновления.

2 голосов
/ 21 апреля 2010

Вызвать метод validate() для контейнера, который необходимо выложить - возможно, панель содержимого вашего окна.

1 голос
/ 21 апреля 2010

Я думал, что (с Java 6?) Вам ничего не нужно делать ... Это должно происходить автоматически - нет?

В следующем примере это происходит автоматически ...

public class TT extends JFrame
{
    public TT()
    {
        setLayout(new FlowLayout());
        JLabel label = new JLabel();
        label.setText("Label:");
        add(label);

        final JTextField textField = new JTextField();
        add(textField);

        JButton button = new JButton();
        button.setText("Button");
        button.addActionListener(new ActionListener()
        {
            public void actionPerformed(ActionEvent event)
            {
                if (textField.isVisible())
                {
                    textField.setVisible(false);
                }
                else
                {
                    textField.setVisible(true);
                }
            }
        });
        add(button);
    setSize(100,100);
    }

    public static void main(String[] args)
    {
        SwingUtilities.invokeLater(new Runnable()
        {
            public void run()
            {
                TT frame = new TT();
                frame.setDefaultCloseOperation(TT.EXIT_ON_CLOSE);
                frame.setVisible(true);
            }
        });
    }
}

[Добавить] И использование менеджера макета, такого как GridBagLayout, также решило бы проблему «Переразметки» страницы.

1 голос
/ 21 апреля 2010

Попробуйте позвонить repaint(), что в свою очередь вызовет paintComponent().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...