#java #swing #jpanel #jbutton #actionlistener
Вопрос:
Я хочу, чтобы при нажатии на кнопку она добавляла метку на панель. Снаружи прослушиватель действий работает нормально, но внутри ничего не делает, ни кода ошибки, ни чего-либо еще. (Некоторые части кода отсутствуют, я удалил, потому что думаю, что это не имеет отношения к делу)
JPanel panel1 = new JPanel(); panel1.setBorder(new LineBorder(new Color(0, 0, 0), 2, true)); panel1.setBounds(60, 80, 128, 128); frmmain.getContentPane().add(panel1); JLabel label1 = new JLabel (); JButton btnTest = new JButton("Test"); btnTest.setFont(new Font("Bahnschrift", Font.PLAIN, 21)); btnTest.setBounds(240, 367, 121, 57); btnTest.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { try { panel1.add(label1); } catch (Exception e2) { System.err.println(e2); } } });
Комментарии:
1. попробуйте panel.revalidate() и panel1.перекрасить() после добавления метки. Когда вы добавляете компоненты, пока они видны, перекраска/повторная проверка всегда является хорошей идеей, независимо от того, видны эти новые компоненты или нет.
2. Кроме того, избегайте использования
setBounds
метода для любого компонента. Панели должны использовать менеджеры компоновки, а пользовательский интерфейс должен создаваться менеджерами компоновки. Жесткое кодированиеsetBounds
— плохая идея. Ваш пользовательский интерфейс не будет «работать» при разных размерах/разрешениях экрана.3. Спасибо, что это сработало. Да, я знаю, что такое setbounds, мне нужно изучить другие макеты на java. (Я знаю только абсолютное)