Как связать класс JFrame с другим JPanel, используя JButton - PullRequest
0 голосов
/ 20 декабря 2018

У меня в школе есть проект по созданию приложения.Поскольку я довольно новичок в мире Java, я борюсь.

Я решил поработать в NetBeans и попытаться каким-то образом динамически создать приложение.Я создал класс JFrame динамически в пакетах с исходным кодом и добавил туда несколько кнопок (динамически).

Затем я создал другой класс JPanel, который я хочу связать с классом JFrame, используя Jbutton в классе JFrame.Однако я не знаю, как JFrame вызывается в классе JFrame, что означает, что я не могу ничего добавлять или удалять из него, только динамически.

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

Я также попытался просто назвать JFrame (Frame.add(nr)), но он только написал, что

non-static method add cannot be referenced from a static context 

public class Frame extends javax.swing.JFrame {

    public Frame()  {
        initComponents();
    }

    private void createRecipeActionPerformed(java.awt.event.ActionEvent evt) {  

        intro.show(false);
        NewRecipe nr = new NewRecipe(); 
        Frame.add(nr); 
        nr.show(true);
    } 

Мой ожидаемый результат: при нажатии JButton в JFrame появляется JPanel.

1 Ответ

0 голосов
/ 20 декабря 2018

Кажется, вы новичок в Java и Swing.Итак, я приведу ниже код в качестве примера для начала.Я думаю, что он делает то, что вы хотите.Итак, поиграйте с ним немного и попытайтесь понять, что происходит.

Возможно, вам придется поиграть с несколькими примерами пользовательского интерфейса, чтобы понять «паттерн» java и swing.

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class Frame extends JFrame {

  private JButton button;

  public Frame() {
    initComponents();
  }

  private void initComponents() {
    button = new JButton("Add New Recipe Panel");
    button.addActionListener(new ActionListener() {
      @Override
      public void actionPerformed(ActionEvent e) {
        Frame.this.getContentPane().add(new NewRecipe(), BorderLayout.CENTER);
        Frame.this.getContentPane().revalidate();
      }
    });
    this.getContentPane().add(button, BorderLayout.NORTH);
  }

  public static void main(String[] args) {
    Frame frame = new Frame();
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setBounds(200, 100, 400, 300);
    frame.setVisible(true);
  }

  class NewRecipe extends JPanel {

    NewRecipe() {
      this.add(new JLabel("New Recipe"));
    }
  }
}
...