Добавить и удалить JTextField во время выполнения в программе Java (Swings) - PullRequest
2 голосов
/ 22 июля 2010

как добавлять и удалять компоненты (JButons, JTextField и т. Д.) Во время выполнения в программе Swing (Java) без использования NetBeans?какой макет я должен использовать?Я хочу, чтобы пользователь ввел имя пользователя и пароль, и когда он нажимает кнопку «Отправить», должен появиться новый экран с новыми компонентами (JButtons, JTextField и т. Д.), Я не могу выполнить переход во время выполнения.

Ответы [ 4 ]

3 голосов
/ 23 июля 2010

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

Создайте класс LoginPanel, который размещает поля имени пользователя и пароля, метки и кнопку отправки.Затем, когда нажимается кнопка «Отправить», после аутентификации входа в систему скрыть панель входа в систему и отобразить новую панель с макетом, который вы хотите для следующего экрана.

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

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

public static void centerFrameOverComponent(JFrame frame, JComponent component) {
    Window parent = SwingUtilities.getWindowAncestor(component);

    Rectangle frameRect = frame.getBounds();
    Rectangle parentRect = parent.getBounds();

    int x = (int) (parentRect.getCenterX() - frameRect.getWidth() / 2);
    int y = (int) (parentRect.getCenterY() - frameRect.getHeight() / 2);

    frame.setLocation(x, y);
}
3 голосов
/ 22 июля 2010

Один из подходов заключается в использовании CardLayout. Ваш обработчик кнопки входа будет проверять учетные данные и использовать show(), чтобы открыть вторую панель.

Приложение: В целях безопасности рассмотрите возможность использования JPasswordField для пароля; Для удобства, рама setLocationRelativeTo() для позиционирования рамы.

3 голосов
/ 22 июля 2010

Другой подход заключается в вызове setVisible(false) для определенного компонента, когда вы хотите скрыть его.

В тех случаях, когда я хотел добавить / удалить всю вспомогательную панель, я использовал следующее:

panel.remove(subPanel);
panel.revalidate();
panel.repaint();

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

2 голосов
/ 22 июля 2010

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

в этомкак вы можете добавить jbutton к вашему JFrame.

class MyFrame extends JFrame{

    private JButton jb= new JButton("hello");

    public MyFrame(){
        setSize(new Dimension(300,180));  //set the MyFrame size
        getContentPane().add(jb);  //add your Component at ContentPane
    }

}

после входа в систему вы можете показать свой новый кадр следующим образом:

new MyFrame().setVisible(true);
...