Как сделать мне с переход на новое окно в другом классе?

Я написал код в main классе, где создал форму JFrame-овскую с кнопками, надписями, фоном, вообщем все в порядке! Но. Это все - главное меню игры по задумке и есть там кнопка ОПЦИИ.

Так вот, я создал класс Option рядом, в проекте, прописал там тоже JFrame form2 = new Jframe; указал размеры, все как положено. Но и как мне теперь сделать вызов этого окошка из main? я промучался уже весь день, перебрал кучу вариантов и советов, эксперементировал сам - единственное, чего я смог добиться - к моему совершенному непониманию, главное main-окно просто клонировалось и их становилось двое, а ОПЦИИ так и не запустились...

Вот код из МАЙН который должен по идее запускать ОПЦИИ:

public class NeverMy
{
public static void main(String[] args)
{
JFrame frame = new ImageViewer();
frame.setIconImage(Toolkit.getDefaultToolkit().getImage("data/pic/Im5.png"));//устанавливаем иконку в название окна
frame.setLocationRelativeTo(null);//помещаем окно в центр раб стола
}

}
@SuppressWarnings("serial")
class ImageViewer extends JFrame

{
private JLabel countLabel;
private JButton newGame;
(тут еще другие кнопки перечисляются, это не нужно...)

private JButton options; (вот то что мне нужно)


ImageViewer ()
{

setTitle("Осенняя история");//заголовок окна игры
setSize(1024, 768);//размер окна игры
getContentPane().setBackground(Color.getHSBColor(0.20f, 0.55f, 1));
setResizable(false);//запрет на изменение размера мышью окна
setVisible(true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLayout(null);

countLabel = new JLabel(" Осенняя история");
add(countLabel);
countLabel.setFont(Library.font4);
countLabel.setLocation(6, 10);
countLabel.setSize(500, 55);
countLabel.setBackground(Color.magenta);
//countLabel.setBorder(new LineBorder(Color.black, 1)); //Бордюр вокруг Заголовка

{
final JPanel grPan = (JPanel) getContentPane(); //передаем управление графическим окном ручному конструктору для произвольной настройки положения компонентов
final JPanel p = new JPanel();//панель под Заголовком
p.setBorder(new BevelBorder(BevelBorder.RAISED));
p.setSize(700, 50);
p.setLocation(1, 11);
p.setBackground(Color.getHSBColor(0.10f, 0.55f, 1));
grPan.add(p);
}

(Library - это еще один класс, где я перечислил иконки и шрифты для игры, если что..)
newGame = new JButton("Новая игра", Library.i1);
newGame.setPressedIcon(Library.i1press);
{
newGame.addActionListener(null);//не знаю что дописать тут пока...
}

saveGame = new JButton(" >> Сохранить", Library.i2);
(перечисляются другие кнопки...)
options = new JButton(" Настройки", Library.i4);
options.setPressedIcon(Library.i4press);//вот эта кнопка ОПЦИИ

final JPanel buttonsPanel = new JPanel(new GridLayout(8, 1, 3, 3));

{
(другие кнопки...)
buttonsPanel.add(options);
(другие кнопки...)

options.setFont(Library.font2);
options.setToolTipText("Настройки игры");
options.setBorder(new EtchedBorder(EtchedBorder.RAISED));
options.setFocusPainted(false);

options.addActionListener(new ActionListener()
{
public void actionPerformed(final ActionEvent e)
{
и тут я весь день мучался ;(
}
});
(ну и другие кнопки и уже не важно..)

А вот код из класса ОПЦИИ, который должен создавать по вызову новый фрейм:

public class Options
{
@SuppressWarnings("serial")
public class OptionList extends JFrame
{
{
JFrame frame2 = new JFrame("Dfcz");
frame2.setIconImage(Toolkit.getDefaultToolkit().getImage("data/pic/Im5.png"));//устанавливаем иконку в название окна
frame2.setLocationRelativeTo(null);//помещаем окно в центр раб стола
frame2.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame2.setVisible(true);
}
}

@SuppressWarnings("serial")
class ImageViewer extends JFrame
{
public void frame2 ()
{
setTitle("Опции");//заголовок окна
(разные параметры внешнего вида...)
setVisible(true);

JLabel frame2 = new JLabel("dhehtjdtykl");
(тоже...)
frame2.setBackground(Color.cyan);
}
}
}

По-моему я вообще в ходе всех своих попыток тут посбивал что-то - не знаю, только развел бардак и все чего удалось достичь. Может открывать новое окно из другого класса - вообще неудачная мысль?
  • Вопрос задан
  • 3399 просмотров
Решения вопроса 1
kiralis39
@kiralis39 Автор вопроса
промучавшись пару дней, кое-как, своим умом я все-таки догнал как все правильно поставить! ))) Верного ответа я так и не нашел в интернете, но прописать в кнопку нужно было вот что:

options.addActionListener(new ActionListener()
{
public void actionPerformed(final ActionEvent e)
{
Options OptWin = new Options();
OptWin.OptionList.setVisible(true);
}
});

и перестроить скелет класса Options каким-то хитрым способом, что я сам до конца не понял.. если честно..

Все заработало, хотя, конечно, думаю эта проблема еще не раз встанет на моем пути, пока кто-то наконец не объяснит что же было не так.

Код в классе Options же теперь выглядит как

public class Options
{
public JFrame OptionList;

{
{
JFrame frame2 = new JFrame("Настройки");
frame2.setIconImage(Toolkit.getDefaultToolkit().getImage("data/pic/Im5.png"));//устанавливаем иконку в название окна
frame2.setLocationRelativeTo(null);//помещаем окно в центр раб стола
frame2.pack();
frame2.setFont(Library.font3);
frame2.setLocation(4, 15);
frame2.setSize(400, 250);
frame2.setBackground(Color.cyan);
frame2.setVisible(true);
}

}
@SuppressWarnings("serial")
class ImageViewer extends JFrame

и так. далее. Если кто поймет что как я должен буду в след раз делать сразу правильно - сообщите мне, пожалуйста.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
vipuhoff
@vipuhoff
в Java не силен, но возможно как то так
var Wind = new Options();
Wind.Show();
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы