您好我想问一下如何从MainScreen
调用主菜单屏幕?并且请详细解释一下Listener
的更多细节。
下面是我准备好的代码:
public class MainScreen {
public static void main(String[] args) {
JFrame frame = new JFrame();
JPanel panel = new JPanel();
frame.add(panel);
placeComponents(panel);
frame.setVisible(true);
}
private static void placeComponents(JPanel panel) {
JLabel WelcomeNote = new JLabel("Welcome");
panel.add(WelcomeNote);
JButton Start = new JButton("Start");
panel.add(Start);
//Insert action for Start button here
}
}
public class MainMenu {
public static void main(String[] args){
JFrame frame = new JFrame();
JPanel panel = new JPanel();
frame.add(panel);
placeComponents(panel);
frame.setVisible(true);
}
private static void placeComponents(JPanel panel) {
JLabel menuLbl = new JLabel("Main Menu");
panel.add(menuLbl);
}
}
答案 0 :(得分:0)
有什么问题?
Java中的单个文件中不能有两个主要方法。
<强>程序强>
这是一个改变窗口的演示程序。
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.util.*;
class First extends JFrame
{
JLabel jlb = new JLabel("Label in First Window");
JButton jb = new JButton("Next Window");
First()
{
super("First Windows");
//Set this frame
this.setSize(350,250);
this.setLayout(null);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//Setting size of components
jlb.setBounds(10,10,200,40);
jb.setBounds(10,120,150,40);
add(jlb);
add(jb);
jb.addActionListener((e)->{
this.setVisible(false);
new Second();
});
setVisible(true);
}
}
class Second extends JFrame implements ActionListener
{
JLabel jlb = new JLabel("Label in Second Window");
JButton jb = new JButton("Prev. Window");
Second()
{
super("Second Window");
this.setSize(350,250);
this.setLayout(null);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//Setting size of components
jlb.setBounds(10,10,200,40);
jb.setBounds(10,120,150,40);
add(jlb);
add(jb);
jb.addActionListener(this);
setVisible(true);
}
public void actionPerformed(ActionEvent e)
{
this.setVisible(false);
new First();
}
}
class StartHere
{
public static void main(String[] args) {
Runnable r = ()->{
new First();
};
r.run();
}
}
了解上述计划。
StartHere类有一个main方法。它只用于调用你喜欢的第一个窗口。我甚至可以使用new Second()
来呼叫Second。
第一个和第二个是类似的代码
他们俩都有按钮。在每个按钮(或JButton)上,我添加了一个名为addActionListner(this)
的方法。这个方法会激活一个 ActionEvent ,你可以在第二节中看到它被 actionPerformed 方法捕获。此方法在功能接口, ActionListener 中声明。在第二课中传递的'this'是告诉代码中 actionPerformed 方法的位置。该参数是 ActionListener 。因此,您必须为定义 actionPerformed 的类实现 ActionListener 。
<强>加成强>
First 类似乎没有遵循上述规范。我传递了一种奇怪的语法。这是Java 8中包含的新功能。
请参阅此Oracle教程,了解Lambda Expressions。