private void setupWin() { setSize(WIDTH, HEIGHT); setLayout(null); //自由布局,或绝对布局 setLocationRelativeTo(null); //将窗口置于屏幕中心位置 setResizable(false); //禁止窗口的极大化按钮 //没有设置窗口关闭按钮的行为,相反我们使用窗口事件适配器,响应窗口事件并关闭窗口 //实例化WindowAdapter的匿名类,完成事件处理 addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { System.out.println("你点击了关闭按钮"); (4) ; //关闭登录窗口 ,匿名类直接调用外层类的方法dispose } }); }
时间: 2024-03-07 16:51:48 浏览: 127
这段代码是用来设置窗口界面的,其中包括设置窗口大小,布局方式,位置以及禁止窗口的极大化按钮。同时也没有设置窗口关闭按钮的行为,而是使用了窗口事件适配器来响应窗口事件并关闭窗口。在窗口事件适配器的匿名类中,重写了窗口关闭事件的处理方法,当窗口关闭时,会输出一条信息,并调用外层类的dispose()方法来关闭登录窗口。
相关问题
这样的棋盘中,如何实现棋盘的格子随鼠标移动而高亮public ChessGameFrame(int width, int height) { setTitle("斗兽棋"); //设置标题 this.WIDTH = width; this.HEIGTH = height; this.ONE_CHESS_SIZE = (HEIGTH * 4 / 5) / 9; setSize(WIDTH, HEIGTH); setLocationRelativeTo(null); // Center the window. setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); //设置程序关闭按键,如果点击右上方的叉就游戏全部关闭了 setLayout(null); addRestart(); addGiveUp(); addUndo(); addChessboard(); addLabel(); addLoadButton(); addSave(); addAImode(); addAImodeGreedy(); addBackground(); }public CellComponent(Color background, Point location, int size) { setLayout(new GridLayout(1,1)); setLocation(location); setSize(size, size); this.background = background; } @Override protected void paintComponent(Graphics g) { super.paintComponents(g); g.setColor(background); g.fillRect(1, 1, this.getWidth()-1, this.getHeight()-1); } }且不能与鼠标点击相冲突
可以通过添加鼠标移动监听器来实现棋盘格子的高亮。在棋盘上添加一个MouseMotionListener,然后在mouseMoved()方法中计算鼠标所在的格子位置,然后将该格子的颜色设置为高亮色即可。
示例代码:
```
//在ChessGameFrame中添加以下代码
private CellComponent highlightedCell; //记录当前高亮的格子
private void addChessboard() {
chessboard = new ChessboardComponent();
chessboard.setLocation(0, 0);
chessboard.setSize(WIDTH, HEIGTH);
chessboard.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
//鼠标点击事件处理
//...
}
});
chessboard.addMouseMotionListener(new MouseMotionAdapter() {
@Override
public void mouseMoved(MouseEvent e) {
//鼠标移动事件处理
Point p = e.getPoint();
int row = (int) Math.round((p.getY() - ChessboardComponent.MARGIN) / ONE_CHESS_SIZE);
int col = (int) Math.round((p.getX() - ChessboardComponent.MARGIN) / ONE_CHESS_SIZE);
if (row >= 0 && row < Chessboard.ROWS && col >= 0 && col < Chessboard.COLS) {
//计算鼠标所在的格子位置,如果位置不同于当前高亮的格子,则设置新的高亮格子
CellComponent cell = chessboard.getCell(row, col);
if (cell != highlightedCell) {
if (highlightedCell != null) {
highlightedCell.setBackground(highlightedCell.getBackground().darker()); //取消当前高亮格子
}
highlightedCell = cell;
highlightedCell.setBackground(highlightedCell.getBackground().brighter()); //设置新的高亮格子
}
} else {
//鼠标移出棋盘,取消当前高亮格子
if (highlightedCell != null) {
highlightedCell.setBackground(highlightedCell.getBackground().darker());
highlightedCell = null;
}
}
}
});
add(chessboard);
}
//在CellComponent中添加以下代码
@Override
protected void processMouseEvent(MouseEvent e) {
//处理鼠标事件,不做任何处理,避免与父组件ChessboardComponent的鼠标事件相冲突
}
```
如何看这package xjdz; import javax.swing.*; import java.awt.*; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; public class GameWin extends JFrame { private static final int WIDTH = 999; private static final int HEIGHT = 666; private static final String TITLE = "oqcw星际大战仿飞机大战小游戏"; private static final String BG_IMAGE_PATH = "src/bg.jpg"; public GameWin() { initWindow(); } private void initWindow() { // 设置窗口大小、位置、标题、背景等属性 this.setSize(WIDTH, HEIGHT); this.setLocationRelativeTo(null); this.setTitle(TITLE); this.setResizable(false); this.setContentPane(createBackgroundPanel()); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.addWindowListener(new WindowAdapter() { @Override public void windowClosing(WindowEvent e) { super.windowClosing(e); dispose(); } }); } private JPanel createBackgroundPanel() { JPanel bgPanel = new JPanel() { protected void paintComponent(Graphics g) { super.paintComponent(g); ImageIcon icon = new ImageIcon(BG_IMAGE_PATH); Image img = icon.getImage(); g.drawImage(img, 0, 0, getWidth(), getHeight(), icon.getImageObserver()); } }; bgPanel.setLayout(null); bgPanel.setPreferredSize(new Dimension(WIDTH, HEIGHT)); return bgPanel; } public void start() { this.setVisible(true); } public static void main(String[] args) { GameWin gameWin = new GameWin(); gameWin.start(); } }段代码
这段代码定义了一个名为 "GameWin" 的类,继承了 JFrame 类,以创建一个窗口程序。其中包含了窗口的大小、位置、标题、背景等属性的初始化及设置。通过调用 initWindow() 方法来初始化窗口,通过 createBackgroundPanel() 方法创建一个 JPanel 作为窗口的背景,并设置背景图片。最后通过调用 start() 方法显示窗口并启动程序。这段代码的主要作用是创建一个窗口程序,并设置窗口的属性和背景。
阅读全文