#java #swing #jframe #jpanel #jbutton
#java #качать #jframe #jpanel #jbutton
Вопрос:
Я хотел бы добавить JPanel из другого класса в JPanel:
class FirstPanel extends JPanel
{
private JButton button;
FirstPanel()
{
setLayout(null);
setVisible(true);
button = new JButton();
button.setBounds(x, y, width, height);
button.setFocusPainted(false);
button.setIcon(new ImageIcon(SecondPanel.class.getResource(filePath)));
button.setBackground(bgColor);
button.setForeground(Color.white);
button.setVisible(true);
Border emptyBorder = BorderFactory.createEmptyBorder();
button.setBorder(emptyBorder);
add(button);
ButtonActionHandler buttonActionHandler = new ButtonActionHandler();
}
public class ButtonActionHandler implements ActionListener
{
public void actionPerformed(ActionEvent e)
{
setVisible(true);
add(new SecondJPanel());
new SecondJPanel().setVisible(true);
}
} }
И это моя вторая JPanel:
class SecondPanel extends JPanel
{
private JButton button;
private JLabel titleLabel;
SecondPanel()
{
setLayout(null);
setVisible(true);
button = new JButton();
button.setBounds(100, 200, 100, 200);
button.setFocusPainted(false);
button.setIcon(new ImageIcon(SecondPanel.class.getResource(filePath)));
button.setBackground(bgColor);
button.setForeground(Color.white);
button.setVisible(true);
Border emptyBorder = BorderFactory.createEmptyBorder();
button.setBorder(emptyBorder);
add(button);
}
}
Запуск первой панели через JFrame (из другого класса) работает, однако добавление второй JPanel к первой не работает.
Любая помощь действительно ценится
Комментарии:
1. Вам нужна композиция здесь: добавьте обе JPanel в один JFrame. Вам понадобится менеджер компоновки.
2. Итак, мне нужно поместить все в один класс JFrame?
3. Вот как я бы это сделал. Это позволяет создавать сложную страницу из более простых JPanels. Я бы рекомендовал ознакомиться с внедрением зависимостей. Вы можете легко изменять свои обработчики с помощью внедрения конструктора.
4. Хорошо, спасибо за быстрый ответ 🙂
5. Я не знаю, каковы ваши требования. Вы, кажется, новичок в Java. Swing существует уже очень давно. Изучите его, освоитесь, возьмите JavaFX, если у вас есть необходимость и желание. Большинство людей пошли в направлении веб-сервисов и пользовательских интерфейсов на основе браузера, доступных на настольных компьютерах и мобильных устройствах. Swing и JavaFX — это старинные технологии 1990-х / 2000-х годов.
Ответ №1:
Извините, но вы, похоже, не понимаете, что я вам говорю.
Композиция — ваш друг.
Я бы сделал это так:
public class JPanel1 extends JPanel {
private JButton button;
public JPanel1(ActionListener buttonListener) {
this.button = new Button("Push me");
this.button.addActionListener(buttonListener);
// do what's needed to add the button to the display.
}
}
public class JPanel2 extends JPanel {
private JButton button;
public JPanel2(ActionListener buttonListener) {
this.button = new Button("Push me");
this.button.addActionListener(buttonListener);
// do what's needed to add the button to the display.
}
}
public class TwoPanelFrame extends JFrame {
public TwoPanelFrame(JPanel p1, JPanel p2) {
// add the two panels to your frame and display.
}
}
Комментарии:
1. Хорошо, но как мне отобразить JPanel2, когда я нажимаю на кнопку в jPanel1?