Java 如何通过单击按钮打开JFrame

Java 如何通过单击按钮打开JFrame,java,swing,jframe,Java,Swing,Jframe,我正在制作一个游戏,但是我有一个主菜单和太多的外部菜单,我想通过点击JFrame中相应的按钮打开其中一个菜单 main.java的代码 packagemain; 导入java.awt.*; 导入java.awt.event.*; 导入javax.swing.*; 导入game.client.mainClient; 导入game.server.mainServer; 公共类main扩展了JPanel{ /** * */ 私有静态最终长serialVersionUID=65907709281487

我正在制作一个游戏,但是我有一个主菜单和太多的外部菜单,我想通过点击JFrame中相应的按钮打开其中一个菜单

main.java的代码

packagemain;
导入java.awt.*;
导入java.awt.event.*;
导入javax.swing.*;
导入game.client.mainClient;
导入game.server.mainServer;
公共类main扩展了JPanel{
/**
* 
*/
私有静态最终长serialVersionUID=6590770928148744094L;
私人JLabel jcomp1;
私人JButton jcomp5;
私人JButton jcomp6;
私人JLabel jcomp8;
私人JLabel jcomp9;
私人JLabel jcomp10;
公用干管(){
//构造组件
jcomp1=新JLabel(“测试游戏”);
jcomp5=新的JButton(“单播放器”);
jcomp6=新的JButton(“多人游戏”);
jcomp8=newjlabel(“这个游戏是由kebe_2;制作的”);
jcomp9=新的JLabel(“gui是用gui制作的”);
jcomp10=新的JLabel(“游戏验证开发1.0”);
//调整大小并设置布局
setPreferredSize(新尺寸(681466));
setLayout(空);
//添加组件
添加(jcomp1);
新增(jcomp5);
添加(jcomp6);
添加(jcomp8);
添加(jcomp9);
增加(jcomp10);
//设置组件边界(仅绝对定位需要)
jcomp1.setBounds(295,5,70,25);
jcomp5.setBounds(265,30,115,30);
jcomp6.setBounds(265,65,115,30);
jcomp8.setBounds(0430180,25);
jcomp9.setBounds(0,415,155,20);
jcomp10.setBounds(0445140,25);
//关闭和打开
//单人
jcomp5.addActionListener(新的ActionListener(){
已执行的公共无效操作(操作事件e)
{
系统出口(0);
mainClient mc=新的mainClient();
mc.setVisible(true);
}
});
//多人游戏
jcomp6.addActionListener(新的ActionListener(){
已执行的公共无效操作(操作事件e)
{
系统出口(0);
mainServer ms=新的mainServer();
ms.setVisible(真);
}
});
}
公共静态void main(字符串[]args){
JFrame=新JFrame(“测试游戏”);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().add(newmain());
frame.pack();
frame.setVisible(true);
}
}
mainClient.java的代码

package.client;
导入java.awt.*;
导入java.awt.event.ActionEvent;
导入java.awt.event.ActionListener;
导入javax.swing.*;
公共类mainClient扩展了JPanel
{
/**
* 
*/
私有静态最终长serialVersionUID=-1271816540338950462L;
私人JLabel jcomp1;
私人JComboBox jcomp2;
私人JButton jcomp3;
公共mainClient(){
//构造前组件
字符串[]jcomp2Items={“保存1”、“保存2”、“保存3”、“保存4”、“保存5”};
//构造组件
jcomp1=新的JLabel(“单播放器”);
jcomp2=新的JComboBox(jcomp2Items);
jcomp3=新的JButton(“播放选定的保存”);
//调整大小并设置布局
setPreferredSize(新尺寸(681466));
setLayout(空);
//添加组件
添加(jcomp1);
新增(jcomp2);
添加(jcomp3);
//设置组件边界(仅绝对定位需要)
jcomp1.setBounds(290,5,85,25);
jcomp2.setBounds(280,30,100,25);
jcomp3.setBounds(255,70,150,25);
jcomp3.addActionListener(新ActionListener(){
已执行的公共无效操作(操作事件e)
{
系统出口(0);
}
});
}
公共静态void main(字符串[]args){
JFrame=新JFrame(“单播放器”);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().add(新的mainClient());
frame.pack();
frame.setVisible(true);
}
}
主服务器代码

package.server;
导入java.awt.*;
导入javax.swing.*;
公共类mainServer扩展了JPanel
{
/**
* 
*/
私有静态最终长serialVersionUID=2726545572728204122L;
私人JLabel jcomp1;
私人JButton jcomp2;
私人JButton jcomp3;
公共主服务器(){
//构造组件
jcomp1=新的JLabel(“多人游戏”);
jcomp2=新的JButton(“主机游戏”);
jcomp3=新的JButton(“加入游戏”);
//调整大小并设置布局
setPreferredSize(新尺寸(681466));
setLayout(空);
//添加组件
添加(jcomp1);
新增(jcomp2);
添加(jcomp3);
//设置组件边界(仅绝对定位需要)
jcomp1.setBounds(300,0,75,25);
jcomp2.setBounds(285,25100,25);
jcomp3.setBounds(285,50,100,25);
}
公共静态void main(字符串[]args){
JFrame=新JFrame(“多人游戏”);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().add(新的mainServer());
frame.pack();
frame.setVisible(true);
}
}

单击singleplayer按钮时如何在mainClient.java中打开JFrame,单击multiplayer按钮时如何在mainServer.java中打开JFrame?

为按钮创建ActionListeners。定义框架,然后可以使用类名访问它们。比如,

class mainClient extends JPanel {
    JFrame mainClientFrame = new JFrame();
}
然后,

mainClient mc = new mainClient();
mc.mainClientFrame.setVisible(true);
如果要在主空心中使用此框架,请将其定义为静态

class mainClient extends JPanel {
    static JFrame mainClientFrame = new JFrame();
}

什么是“meny”?Matrix4290 meny是main中的主框架。java1)参见2)Java GUI必须在不同的操作系统、屏幕大小、屏幕分辨率等上工作,在不同的地区使用不同的PLAF。因此,它们不利于像素完美布局。用layou代替