@olololosh

Почему не вызывается метод?

Есть класс с прорисовкой меню. Так же есть класс с прорисовкой JFrame. В классе с фреймом хочу вызвать метод меню:
frame.setJMenuBar(menuBar);
frame.setPreferredSize(new Dimension(800, 600));
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);

//Method menuCreator
MenuCreator menuCreator = new MenuCreator();
menuCreator.menuCreator();

ругается на 1 строку frame.setJMenuBar(menuBar);
пишет cannot find symbol - variable menuBar
что ему не нравиться?
  • Вопрос задан
  • 1419 просмотров
Решения вопроса 1
timych
@timych
olololosh: Я не понял - вы просто обращаетесь к переменной из другого класса? ("menuBar"). В Java так нельзя.
Во первых метод menuCreator() класса MenuCreator у вас статический. Соответственно и обращаться к нему надо MenuCreator.menuCreator(); Но это не очень красиво. Поэтому я бы посоветовал убрать модификатор static.
Во вторых если вы хотите получить какую-либо переменную из другого класса. она должна быть обьявлена в теле класса а не метода, как у вас. (я про menuBar)
В третьих чтобы получить эту переменную, желательно сделать для нее "геттер", который и будет ее возвращать.
В пятых даже еслы бы и у вас был доступ к переменной menuBar, эта строчка frame.setJMenuBar(menuBar); вызвала бы NullpointerException, так как menuCreator.menuCreator() вызывается позже.
Короче такая мешанина - ужас.
Вот как это примерно могло бы все выглядеть(но нужно весь код смотреть конечно ):

package application;
import java.awt.Font;
import javax.swing.JMenu;
import javax.swing.JMenuBar;

// Этот клас может создавать нужные вам меню
public class MenuCreator {

	public JMenuBar createMenuBar() {
		// Create menuBar
		JMenuBar menuBar = new JMenuBar();
		return menuBar;
	}

	public JMenu createMenu() {
		// Create font
		Font font = new Font("Verdana", Font.PLAIN, 11);
		// Create File Menu
		JMenu fileMenu = new JMenu("File");
		fileMenu.setFont(font);
		return fileMenu;
	}
}

package application;
import java.awt.Dimension;
import javax.swing.JFrame;
import javax.swing.JMenuBar;

// в этом классе у вас происходит создание фрейма и всякая другая логика
public class MyMainClassWithJFrame {

	public static void main(String[] args) {

		// ваш какой-то код...
		JFrame frame = new JFrame();

		// создаем обьект MenuCreator
		// теперь мы можем создавать необходимые меню
		MenuCreator menuCreator = new MenuCreator();
		// создаем новый обьект JMenuBar
		JMenuBar menuBar = menuCreator.createMenuBar();

		frame.setJMenuBar(menuBar);
		frame.setPreferredSize(new Dimension(800, 600));
		frame.pack();
		frame.setLocationRelativeTo(null);
		frame.setVisible(true);

		// ваш какой-то код..
	}
}


Да и старайтесь называть методы как-то более логично. :) Успехов!
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@IceJOKER
Web/Android developer
Что ему не нравится, он вам написал:
cannot find symbol - variable menuBar
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы