java - 我需要帮助向此类添加构造函数,以便我可以将菜单栏添加到我的主类

标签 java

这是菜单栏类,如果将其直接放入主类中,它可以工作,但是在它自己的类中却不能,因为没有构造函数,而且我很难做到这一点,我理解构造函数的重要性,但似乎无法理解我的考虑如何将其添加到此类中

public class MenuBar extends mainClass {

   JFrame frame = new JFrame("Assingment");
   JMenuBar menuBar;
   JMenu menu, submenu;
   JMenuItem menuItem;
   JPopupMenu popup;

   {
      menuBar = new JMenuBar();
      menu = new JMenu("File");
      menu.setMnemonic(KeyEvent.VK_A);
      menu.getAccessibleContext().setAccessibleDescription("File Menu");
      menuBar.add(menu);

      menuItem = new JMenuItem("Load");
      menuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_1, ActionEvent.ALT_MASK));
      menu.add(menuItem);

      menuItem.addActionListener(new ActionListener() {
          @Override
          public void actionPerformed(ActionEvent e) {
              JFileChooser fileChooser = new JFileChooser();
                  switch (fileChooser.showOpenDialog(frame)) {
                    case JFileChooser.APPROVE_OPTION:
                        break; 
                  }
               }
      });


      menuItem = new JMenuItem("Save", KeyEvent.VK_T);
      menuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_2, ActionEvent.ALT_MASK));
      menuItem.getAccessibleContext().setAccessibleDescription("Save");
      menu.add(menuItem);

      menuItem = new JMenuItem("Exit",KeyEvent.VK_T);
      menuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_3, ActionEvent.ALT_MASK));
      menuItem.getAccessibleContext().setAccessibleDescription("Exit");
      menuItem.addActionListener(new ActionListener() {
          @Override
          public void actionPerformed(ActionEvent ae) {
               System.exit(0);
          }
      });

      menu.add(menuItem);
      menu = new JMenu("Help");
      menu.setMnemonic(KeyEvent.VK_N);
      menu.getAccessibleContext().setAccessibleDescription("Help Menu");
      menuBar.add(menu);

      frame.setJMenuBar(menuBar);
      frame.setVisible(true);
    }
} 

头等舱--

 @SuppressWarnings("serial")
    public class GraphicsPanel extends JPanel {

private final static Color BACKGROUND_COL = Color.DARK_GRAY;


private BufferedImage image;

public void drawLine(Color color, int x1, int y1, int x2, int y2) {

    Graphics g = image.getGraphics();

    g.setColor(color);

    g.drawLine(x1, y1, x2, y2);
}


public void clear() {

    Graphics g = image.getGraphics();

    g.setColor(BACKGROUND_COL);

    g.fillRect(0, 0, image.getWidth(),  image.getHeight());
}

@Override
public void paint(Graphics g) {

    // render the image on the panel.
    g.drawImage(image, 0, 0, null);
}





GraphicsPanel() {

    setPreferredSize(new Dimension(500, 300));

    image = new BufferedImage(800, 400, BufferedImage.TYPE_INT_RGB);

    // Set max size of the panel, so that is matches the max size of the image.
    setMaximumSize(new Dimension(image.getWidth(), image.getHeight()));

    clear();
}



  }

主课--

public class mainClass extends GraphicsPanel  {

public static void main(String[] args)
{
    JFrame frame = new JFrame ("Assingment");
   mainClass GraphPan = new mainClass();
   MenuBar mnuBar=new MenuBar();
   frame.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
   frame.setContentPane(GraphPan);
   frame.pack();
   frame.setVisible(true);
}


}

最佳答案

public class TestGui extends JFrame {
    public TestGui() {
        super();
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setResizable(true);
        this.getContentPane().setLayout(new BorderLayout());
        createMenu(this.getContentPane());
        createPanel(this.getContentPane());
        this.pack();
        this.setPreferredSize(this.getSize());
        this.setLocationRelativeTo(null);

    }

private void createMenu(Container pane) {


    JMenuBar menuBar = new JMenuBar();
    JMenu menu = new JMenu("Datei");
    menuBar.add(menu);
    JMenuItem menuItemClose = new JMenuItem("Schließen");
    JMenuItem menuItemEdit = new JMenuItem("Bearbeiten");
    JMenuItem menuItemUndo = new JMenuItem("Rückgängig");

    menuItemEdit.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_E, ActionEvent.CTRL_MASK));
    menuItemEdit.addActionListener(new ActionListener() {

        @Override
        public void actionPerformed(ActionEvent e) {

        }
    });
    menuItemClose.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F4, ActionEvent.ALT_MASK));
    menuItemClose.addActionListener(new ActionListener() {

        @Override
        public void actionPerformed(ActionEvent e) {
            dispose();
        }
    });
    JMenuItem menuItemAdd = new JMenuItem("Einfügen");
    menuItemAdd.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_N, ActionEvent.CTRL_MASK));
    menuItemAdd.addActionListener(new ActionListener() {

        @Override
        public void actionPerformed(ActionEvent e) {

        }

    });

    menuItemUndo.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_Z, ActionEvent.CTRL_MASK));
    menuItemUndo.addActionListener(new ActionListener() {

        @Override
        public void actionPerformed(ActionEvent e) {

        }

    });
    menu.add(menuItemAdd);
    menu.add(menuItemEdit);
    menu.add(menuItemUndo);
    menu.add(menuItemClose);
    menuBar.setMinimumSize(new Dimension(100, 21));


    pane.add(menuBar, BorderLayout.PAGE_START);
}
private void createPanel(Container contentPane) {
    JPanel g = new JPanel();
    g.setPreferredSize(new Dimension(500, 300));

    image = new BufferedImage(800, 400, BufferedImage.TYPE_INT_RGB);

    // Set max size of the panel, so that is matches the max size of the
    // image.
    g.setMaximumSize(new Dimension(image.getWidth(), image.getHeight()));

    clear();
    add(g);
}

private final static Color BACKGROUND_COL = Color.DARK_GRAY;

private BufferedImage image;

public void drawLine(Color color, int x1, int y1, int x2, int y2) {

    Graphics g = image.getGraphics();

    g.setColor(color);

    g.drawLine(x1, y1, x2, y2);
}

public void clear() {

    Graphics g = image.getGraphics();

    g.setColor(BACKGROUND_COL);

    g.fillRect(0, 0, image.getWidth(), image.getHeight());
}

@Override
public void paint(Graphics g) {

    // render the image on the panel.
    g.drawImage(image, 0, 0, null);
}

}

此代码将创建一个窗口,其左上角有一个菜单栏和一个深灰色的 jpanel。唯一的问题是菜单栏位于 jpanel 后面,但如果您用类(class)器点击菜单,您就会看到它

关于java - 我需要帮助向此类添加构造函数,以便我可以将菜单栏添加到我的主类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40974696/

相关文章:

Java:如何启用JIT?

java - 通过 JavaMail API 发送邮件时无法连接到 SMTP 主机异常

java - Python 模拟和单元测试最佳实践

Java 使用 Spring Restful URL

java - 字符串二叉搜索树

Java新手: infinite loop searching for specific text in a file

java - Java 中的并发阻塞标志

java - 我在更新 mySQL 数据库上的 BLOB 时遇到问题

java | Apache 共享 CSV |如何使用 utf-8-bom 编写 csv 文件?

java - 在 Java 中重写 Iterables<Obj> 的正确方法