java swing相关问题

小A阿瑾 2020-02-04 10:40:29
各位大佬 我现在写了主界面了 然后写了游戏说明界面 但是不会 从主界面切换到游戏说明界面!! 请问具体该怎么做 求指导 谢谢各位大佬 还有一个问题是 在一个包下 ,就比如这个游戏,我有五个类 一个主函数入口 他们不继承主函数那个类可以运行吗?
...全文
234 11 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
小A阿瑾 2020-02-13
  • 打赏
  • 举报
回复
引用 10 楼 三仙半 的回复:
我把上面的例子修改了一下,增加了倒计时,怎么发给你?
看大佬怎么方便
三仙半 2020-02-13
  • 打赏
  • 举报
回复
我把上面的例子修改了一下,增加了倒计时,怎么发给你?
小A阿瑾 2020-02-12
  • 打赏
  • 举报
回复
引用 8 楼 三仙半 的回复:
落子后的操作
1、记录当前时间s_time,初始化线程标志isDone=false
2、启动一个线程
3、线程中写一个循环,条件是当前时间c_time-s_time<20秒或者isDone不为真
4、循环体中设置每次循环线程休眠1秒
5、每次循环更新界面,显示剩余时间
6、循环退出后执行其他业务逻辑(isDone为false,代表时间耗尽,判负,否则,转另一个人下棋,具体操作看你的需求)
这个只是简单的思路,还得看你自己的业务逻辑,我想,可能需要记录当年前是谁在准备落子,然后,isDone也可能需要为每个棋手设置一个。随想随写,估计错漏不少,仅供参考。
有点难... 初学者。
三仙半 2020-02-12
  • 打赏
  • 举报
回复
落子后的操作
1、记录当前时间s_time,初始化线程标志isDone=false
2、启动一个线程
3、线程中写一个循环,条件是当前时间c_time-s_time<20秒或者isDone不为真
4、循环体中设置每次循环线程休眠1秒
5、每次循环更新界面,显示剩余时间
6、循环退出后执行其他业务逻辑(isDone为false,代表时间耗尽,判负,否则,转另一个人下棋,具体操作看你的需求)
这个只是简单的思路,还得看你自己的业务逻辑,我想,可能需要记录当年前是谁在准备落子,然后,isDone也可能需要为每个棋手设置一个。随想随写,估计错漏不少,仅供参考。
小A阿瑾 2020-02-12
  • 打赏
  • 举报
回复
引用 4 楼 三仙半 的回复:

import java.awt.BorderLayout;
import java.awt.EventQueue;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;

public class ChessMain extends JFrame {

private static final long serialVersionUID = 1L;
private JPanel contentPane;

/**
* Launch the application.
*/
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
ChessMain frame = new ChessMain();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}

private MenuPanel menuPanel;
private GamePanel gamePanel;

public static final int P_MENU = 1;
public static final int P_GAME = 2;

/**
* Create the frame.
*/
public ChessMain() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 450, 300);
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
contentPane.setLayout(new BorderLayout(0, 0));
setContentPane(contentPane);

menuPanel = new MenuPanel(this);
gamePanel = new GamePanel(this);

contentPane.add(menuPanel);

}

public void swapPanel(int wPanel) {
contentPane.removeAll();
switch (wPanel) {
case P_GAME:
contentPane.add(gamePanel);
break;
case P_MENU:
contentPane.add(menuPanel);
break;
default:
break;
}
validate();
repaint();
}

}
谢了!我现在还差一个倒计时器不会搞 就是 每回合黑棋有20s的时间 黑子下完 时间重新计时 白子也有20s的时间
三仙半 2020-02-12
  • 打赏
  • 举报
回复

import javax.swing.JPanel;
import javax.swing.JLabel;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;

public class GamePanel extends JPanel {
private static final long serialVersionUID = 1L;

private ChessMain main;

/**
* Create the panel.
*/
public GamePanel(ChessMain main) {
this.main = main;

setLayout(null);

JLabel lblNewLabel = new JLabel("游戏界面");
lblNewLabel.setBounds(89, 65, 182, 18);
add(lblNewLabel);

JButton btn_return = new JButton("结束");
btn_return.setBounds(125, 111, 113, 27);
add(btn_return);
btn_return.addActionListener(new ActionListener() {

@Override
public void actionPerformed(ActionEvent arg0) {
main.swapPanel(ChessMain.P_MENU);
}
});

}
}

三仙半 2020-02-12
  • 打赏
  • 举报
回复

import javax.swing.JPanel;
import javax.swing.JLabel;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;

public class MenuPanel extends JPanel {
private static final long serialVersionUID = 1L;

private ChessMain main;

/**
* Create the panel.
*/
public MenuPanel(ChessMain main) {
this.main = main;

setLayout(null);

JLabel label = new JLabel("菜单界面");
label.setBounds(81, 66, 72, 18);
add(label);

JButton btn_start = new JButton("开始游戏");
btn_start.setBounds(149, 110, 113, 27);
add(btn_start);
btn_start.addActionListener(new ActionListener() {

@Override
public void actionPerformed(ActionEvent e) {
main.swapPanel(ChessMain.P_GAME);

}
});

}

}

三仙半 2020-02-12
  • 打赏
  • 举报
回复

import java.awt.BorderLayout;
import java.awt.EventQueue;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;

public class ChessMain extends JFrame {

private static final long serialVersionUID = 1L;
private JPanel contentPane;

/**
* Launch the application.
*/
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
ChessMain frame = new ChessMain();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}

private MenuPanel menuPanel;
private GamePanel gamePanel;

public static final int P_MENU = 1;
public static final int P_GAME = 2;

/**
* Create the frame.
*/
public ChessMain() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 450, 300);
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
contentPane.setLayout(new BorderLayout(0, 0));
setContentPane(contentPane);

menuPanel = new MenuPanel(this);
gamePanel = new GamePanel(this);

contentPane.add(menuPanel);

}

public void swapPanel(int wPanel) {
contentPane.removeAll();
switch (wPanel) {
case P_GAME:
contentPane.add(gamePanel);
break;
case P_MENU:
contentPane.add(menuPanel);
break;
default:
break;
}
validate();
repaint();
}

}
三仙半 2020-02-04
  • 打赏
  • 举报
回复
按照我的习惯,只做一个主窗体MainFrame,其它的界面都用Panel包起来,这些界面都接收一个MainFrame类型的参数,然后,在MainFrame中定义各个界面的成员变量,需要切换时,remove前一个,add后一个就行了,在MainFrame里面定义公开方法,当对界面按钮操作时,可以调用这个方法处理数据或者是切换界面等。
小A阿瑾 2020-02-04
  • 打赏
  • 举报
回复
引用 1 楼 三仙半 的回复:
按照我的习惯,只做一个主窗体MainFrame,其它的界面都用Panel包起来,这些界面都接收一个MainFrame类型的参数,然后,在MainFrame中定义各个界面的成员变量,需要切换时,remove前一个,add后一个就行了,在MainFrame里面定义公开方法,当对界面按钮操作时,可以调用这个方法处理数据或者是切换界面等。
怎么用panel包起来
小A阿瑾 2020-02-04
  • 打赏
  • 举报
回复
引用 1 楼 三仙半 的回复:
按照我的习惯,只做一个主窗体MainFrame,其它的界面都用Panel包起来,这些界面都接收一个MainFrame类型的参数,然后,在MainFrame中定义各个界面的成员变量,需要切换时,remove前一个,add后一个就行了,在MainFrame里面定义公开方法,当对界面按钮操作时,可以调用这个方法处理数据或者是切换界面等。
大佬 可以有详细的代码吗 有没有demo

58,452

社区成员

发帖
与我相关
我的任务
社区描述
Java Eclipse
社区管理员
  • Eclipse
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧