java swing相关问题

小A阿瑾 2020-02-04 10:40:29
各位大佬 我现在写了主界面了 然后写了游戏说明界面 但是不会 从主界面切换到游戏说明界面!! 请问具体该怎么做 求指导 谢谢各位大佬 还有一个问题是 在一个包下 ,就比如这个游戏,我有五个类 一个主函数入口 他们不继承主函数那个类可以运行吗?
...全文
253 11 打赏 收藏 转发到动态 举报
写回复
用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,446

社区成员

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

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