Java Swing 键盘监听事件

java swing 键盘监听按下P键后只让C键生效,其他键无效

1个回答

public class main extends JFrame implements KeyListener {
public main() {
getContentPane().setLayout(null);
setVisible(true);
this.addKeyListener(this);
}

public static void main(String[] args) {
    new main();
}

private boolean T = false;// 当这个变量为true时表示p被按下

@Override
public void keyTyped(KeyEvent e) {
}

// 按下了某个键
public void keyPressed(KeyEvent e) {
    // 当p键被按下时
    if (T) {
        if(e.getKeyCode()==KeyEvent.VK_C){
            System.out.println("你按下了C键");
        }
    } else {// 当P键未被按下时
        if (e.getKeyCode() == KeyEvent.VK_P) {
            System.out.println("P键被按下");
            T = true;
        }else{
            System.out.println("你按下了"+ e.getKeyChar()+"键");
        }
    }

}
// 松开了
public void keyReleased(KeyEvent e) {
    if (e.getKeyCode() == KeyEvent.VK_P) {
        System.out.println("P键被松开");
        T = false;
    }
}

}


Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
swing 全局键盘监听事件

[code="java"] final JFrame j = new JFrame(); j.addKeyListener(new java.awt.event.KeyAdapter() { public void keyPressed(java.awt.event.KeyEvent evt) { System.out.println("this evt:"+evt.getKeyChar()); } }); [/code] 貌似打印不出我想要的值,求大大们指点~

java中的键盘监听器失效问题

package com.tarena.swing; import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import javax.swing.JFrame; import javax.swing.JPanel; public class TestListener extends JPanel { public void action(){ KeyAdapter k=new KeyAdapter() { public void keyReleased(KeyEvent k){ System.out.println("sssss"); } }; this.addKeyListener(k); MouseAdapter l=new MouseAdapter() { public void mouseMoved(MouseEvent e){ System.out.println(e.getX()+" ,"+e.getY()); } }; this.addMouseMotionListener(l); } public static void main(String[] args) { JFrame j=new JFrame(); TestListener l=new TestListener(); j.setSize(400,654); j.add(l); j.setVisible(true); j.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); j.setAlwaysOnTop(true); l.action(); } } ``` ``` 为TestSwing添加键盘监听事件和鼠标移动监听事件 但是键盘的监听失效 只有鼠标移动的能在控制台输出鼠标坐标 ``` ```

JAVA编写俄罗斯方块问题,键盘监听事件不能响应,请大神指点!!!

本人开发环境,MyEclipse8.5,安装JDK版本为1.7:键盘监听器不能相应。 但如果使用MyEclipse自带的JDK的话,键盘监听事件会有响应,但是需要重新加载JDK,请求大神指点原因!!!程序入口在类Tetris中,键盘监听事件也在此类中 #类Cell ``` package com.MyTetris; import java.awt.image.BufferedImage; public class Cell { private int row; private int col; private BufferedImage image; // 贴图 /** * 构造器 * * @param row * @param col * @param image */ public Cell(int row, int col, BufferedImage image) { super(); // 调用Object构造器 this.row = row; this.col = col; this.image = image; } public int getRow() { return row; } public void setRow(int row) { this.row = row; } public int getCol() { return col; } public void setCol(int col) { this.col = col; } public BufferedImage getImage() { return image; } public void setImage(BufferedImage image) { this.image = image; } /** * 重写toString方法,方便调试 */ public String toString() { return row + "," + col; } public void moveRigth() { col++; } public void moveLeft() { col--; } public void softDrop() { row++; } } ``` #类Tetromino ``` package com.MyTetris; import java.util.Arrays; import java.util.Random; public abstract class Tetromino extends Object { protected Cell[] cells = new Cell[4]; protected Stage[] stages; // 不同的方块旋转所用的数据不一样 protected int index = 10000; // 取第几组数据旋转,index指下标 /** * 用于存储方块旋转时的数据 * * @author Administrator * */ protected class Stage { int row0, col0; int row1, col1; int row2, col2; int row3, col3; public Stage(int row0, int col0, int row1, int col1, int row2, int col2, int row3, int col3) { super(); this.row0 = row0; this.col0 = col0; this.row1 = row1; this.col1 = col1; this.row2 = row2; this.col2 = col2; this.row3 = row3; this.col3 = col3; } } /** * 随机生成7种方块之一,是公共方法 。 工厂方法:用于生产(创建)一个对象的方法,封装了复杂的创建过程,方便使用 用在创建对象过程复杂的情况 */ public static Tetromino randomOne() { Random random = new Random(); int type = random.nextInt(7); // 随机生成[0,7) switch (type) { case 0: return new T(); case 1: return new I(); case 2: return new S(); case 3: return new O(); case 4: return new J(); case 5: return new L(); case 6: return new Z(); } return null; // 必须写,不然编译时报错:编译时不看对象,只看引用类型 } /** * 测试方法,用来测试随机生成方法 */ public String toString() { return Arrays.toString(cells); } /** * 当前对象的4格方块整体向左移动 */ public void moveLeft() { cells[0].moveLeft(); cells[1].moveLeft(); cells[2].moveLeft(); cells[3].moveLeft(); } public void moveRigth() { for (int i = 0; i < cells.length; i++) { cells[i].moveRigth(); } } public void softDrop() { this.cells[0].softDrop(); this.cells[1].softDrop(); this.cells[2].softDrop(); this.cells[3].softDrop(); } /** * 向右旋转算法 */ public void rotateRigth() { // 1、计算index++ // 2、获取Sn(4组数据0,1,2,3) // 3、获取当前轴 // 4、格子0是轴,不变 // 5、格子1的行列变成:轴+Sn[1] // 6、格子2的行列变成:轴+Sn[2] // 7、格子3的行列变成:轴+Sn[3] index++; Stage s = stages[index % stages.length]; Cell o = cells[0]; int row = o.getRow(); int col = o.getCol(); cells[1].setRow(row + s.row1); cells[1].setCol(col + s.col1); cells[2].setRow(row + s.row2); cells[2].setCol(col + s.col2); cells[3].setRow(row + s.row3); cells[3].setCol(col + s.col3); } public void rotateLeft() { index--; Stage s = stages[index % stages.length]; Cell o = cells[0]; int row = o.getRow(); int col = o.getCol(); cells[1].setRow(row + s.row1); cells[1].setCol(col + s.col1); cells[2].setRow(row + s.row2); cells[2].setCol(col + s.col2); cells[3].setRow(row + s.row3); cells[3].setCol(col + s.col3); } } class T extends Tetromino { public T() { /** * 格子的出场位置 */ cells[0] = new Cell(0, 4, Tetris.T); cells[1] = new Cell(0, 3, Tetris.T); cells[2] = new Cell(0, 5, Tetris.T); cells[3] = new Cell(1, 4, Tetris.T); stages = new Stage[4]; stages[0] = new Stage(0, 0, 0, -1, 0, 1, 1, 0); // s0 stages[1] = new Stage(0, 0, -1, 0, 1, 0, 0, -1); // s1 stages[2] = new Stage(0, 0, 0, 1, 0, -1, -1, 0); // s2 stages[3] = new Stage(0, 0, 1, 0, -1, 0, 0, 1); // s3 } } class I extends Tetromino { public I() { cells[0] = new Cell(0, 4, Tetris.I); cells[1] = new Cell(0, 3, Tetris.I); cells[2] = new Cell(0, 5, Tetris.I); cells[3] = new Cell(0, 6, Tetris.I); stages = new Stage[2]; stages[0] = new Stage(0, 0, 0, -1, 0, 1, 0, 2); stages[1] = new Stage(0, 0, -1, 0, 1, 0, 2, 0); } } class S extends Tetromino { public S() { cells[0] = new Cell(0, 4, Tetris.S); cells[1] = new Cell(0, 5, Tetris.S); cells[2] = new Cell(1, 3, Tetris.S); cells[3] = new Cell(1, 4, Tetris.S); stages = new Stage[2]; stages[0] = new Stage(0, 0, 0, 1, 1, -1, 1, 0); stages[1] = new Stage(0, 0, 1, 0, -1, -1, 0, -1); } } class J extends Tetromino { public J() { cells[0] = new Cell(0, 4, Tetris.J); cells[1] = new Cell(0, 3, Tetris.J); cells[2] = new Cell(0, 5, Tetris.J); cells[3] = new Cell(1, 5, Tetris.J); stages = new Stage[4]; stages[0] = new Stage(0, 0, 0, -1, 0, 1, 1, 1); stages[1] = new Stage(0, 0, -1, 0, 1, 0, 1, -1); stages[2] = new Stage(0, 0, 0, 1, 0, -1, -1, -1); stages[3] = new Stage(00, 0, 1, 0, -1, 0, -1, 1); } } class L extends Tetromino { public L() { cells[0] = new Cell(0, 4, Tetris.L); cells[1] = new Cell(0, 3, Tetris.L); cells[2] = new Cell(0, 5, Tetris.L); cells[3] = new Cell(1, 3, Tetris.L); stages = new Stage[4]; stages[0] = new Stage(0, 0, 0, -1, 0, 1, -1, 1); stages[1] = new Stage(0, 0, -1, 0, 1, 0, 1, 1); stages[2] = new Stage(0, 0, 0, 1, 0, -1, 1, -1); stages[3] = new Stage(0, 0, 1, 0, -1, 0, -1, -1); } } class O extends Tetromino { public O() { cells[0] = new Cell(0, 4, Tetris.O); cells[1] = new Cell(0, 5, Tetris.O); cells[2] = new Cell(1, 4, Tetris.O); cells[3] = new Cell(1, 5, Tetris.O); stages = new Stage[2]; stages[0] = new Stage(0, 0, 0, 1, 1, 0, 1, 1); stages[1] = new Stage(0, 0, 0, 1, 1, 0, 1, 1); } } class Z extends Tetromino { public Z() { cells[0] = new Cell(1, 4, Tetris.Z); cells[1] = new Cell(0, 3, Tetris.Z); cells[2] = new Cell(0, 4, Tetris.Z); cells[3] = new Cell(1, 5, Tetris.Z); stages = new Stage[2]; stages[0] = new Stage(0, 0, -1, -1, -1, 0, 0, 1); stages[1] = new Stage(0, 0, -1, 1, 0, 1, 1, 0); } } ``` #类Tetris ``` package com.MyTetris; import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent; import java.awt.event.KeyListener; import java.awt.image.BufferedImage; import java.util.Arrays; import java.util.Timer; import java.util.TimerTask; import javax.imageio.ImageIO; import javax.swing.JFrame; import javax.swing.JPanel; public class Tetris extends JPanel { public static final int ROWS = 20; public static final int COLS = 10; /** 墙 */ private Cell[][] wall = new Cell[ROWS][COLS]; /** 正在下落的方块 */ private Tetromino tetromino; /** 下一个进场的方块 */ private Tetromino nextOne; /** 消失的行数 */ private int lines; /** 得分 */ private int score; /** 定时器 */ private Timer timer; /** 得分表,对应销毁行数得分 */ private int[] souseTable = new int[] { 0, 10, 100, 1000, 10000 }; /** * 在Tetris中添加背景图片引用 */ private static BufferedImage backGround; private static BufferedImage gameOver; public static BufferedImage T; public static BufferedImage I; public static BufferedImage S; public static BufferedImage J; public static BufferedImage L; public static BufferedImage Z; public static BufferedImage O; // 静态代码块 static { try { // 图片加载,注意:Tetris类必须与tetris.png(图片)在一个包中,图片名字不能错 backGround = ImageIO.read(Tetris.class.getResource("tetris.png")); gameOver = ImageIO.read(Tetris.class.getResource("game-over.png")); T = ImageIO.read(Tetris.class.getResource("T.png")); I = ImageIO.read(Tetris.class.getResource("I.png")); S = ImageIO.read(Tetris.class.getResource("S.png")); J = ImageIO.read(Tetris.class.getResource("J.png")); L = ImageIO.read(Tetris.class.getResource("L.png")); O = ImageIO.read(Tetris.class.getResource("O.png")); Z = ImageIO.read(Tetris.class.getResource("Z.png")); } catch (Exception e) { e.printStackTrace(); } } /** * 重写paint方法 */ @Override public void paint(Graphics g) { // background:图片对象;0, 0:图片位置,与画板顶角位置相同,图片有多大,展示多大 // 绘制图片背景 g.drawImage(backGround, 0, 0, null); g.translate(15, 15); // 整体向下漂移 paintWall(g); // 画墙 paintTetromino(g); // 画正在下落的格子 paintNextOne(g); // 画下一个出场的格子 paintScore(g); } /** * 画分数 * * @param g */ public void paintScore(Graphics g) { int x = 294; int y = 160; // 设置分数和销毁行数的字体颜色 g.setColor(new Color(0xD667799)); Font font = new Font(Font.MONOSPACED, Font.BOLD, 28); g.setFont(font); g.drawString("SCORE:" + score, x, y); y += 56; g.drawString("LINES:" + lines, x, y); } /** * 封装绘制正在下落的格子的算法 */ public void paintTetromino(Graphics g) { if (tetromino == null) { return; } Cell[] cells = tetromino.cells; for (int i = 0; i < cells.length; i++) { // cells指下落的所有格子 // 将正在下落的某一个格子的引用赋值给cell Cell cell = cells[i]; int x = cell.getCol() * CELL_SIZE; int y = cell.getRow() * CELL_SIZE; g.drawImage(cell.getImage(), x, y, null); } } /** * 绘制下一个要出场的格子的算法 */ public void paintNextOne(Graphics g) { if (nextOne == null) { return; } Cell[] cells = nextOne.cells; for (int i = 0; i < cells.length; i++) { Cell cell = cells[i]; int x = (cell.getCol() + 10) * CELL_SIZE; int y = (cell.getRow() + 1) * CELL_SIZE; g.drawImage(cell.getImage(), x, y, null); } } /** * 封装了绘制墙的算法 */ private static final int CELL_SIZE = 26; private void paintWall(Graphics g) { for (int row = 0; row < wall.length; row++) { for (int col = 0; col < wall[row].length; col++) { Cell cell = wall[row][col]; int x = col * CELL_SIZE; int y = row * CELL_SIZE; if (cell == null) { g.drawRect(x, y, CELL_SIZE, CELL_SIZE); } else { g.drawImage(cell.getImage(), x, y, null); } } } } /** * @param args */ public static void main(String[] args) { System.out.println("1111"); JFrame frame = new JFrame("Tetris"); Tetris tetris = new Tetris(); // Tetris继承了JPanel,所以Tetris就是面板 frame.add(tetris); frame.setSize(541, 588); frame.setLocationRelativeTo(null); /** * 设置默认关闭操作 operation操作 */ frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setVisible(true); // 尽快调用paint()方法 tetris.action(); } /** * 添加软件启动(action)方法 */ public void action() { // wall[1][8] = new Cell(0, 0, T); // wall[8][2] = new Cell(0, 0, J); // Tetromino引用了randomOne创建的对象 tetromino = Tetromino.randomOne(); nextOne = Tetromino.randomOne(); this.repaint(); // 重新绘制界面,尽快自动自动调用paint()方法 KeyListener l = new KeyAdapter() { public void keyPressed(KeyEvent e) { int key = e.getKeyCode(); switch (key) { case KeyEvent.VK_RIGHT: // tetromino.moveRigth(); System.out.println("按下->键"); Tetris.this.moveRigthAction(); break; case KeyEvent.VK_LEFT: // tetromino.moveLeft(); moveLeftAction(); break; case KeyEvent.VK_DOWN: // tetromino.softDrop(); softDropAction(); break; case KeyEvent.VK_SPACE: hardDropAction(); break; case KeyEvent.VK_UP: // tetromino.rotateRigth(); rotateRigthAction(); } repaint(); } }; this.addKeyListener(l); this.setFocusable(true); // 添加定时任务,让方块定时下落 timer = new Timer(); TimerTask task = new TimerTask() { @Override public void run() { softDropAction(); repaint(); } }; timer.schedule(task, 1000, 1000); } /** * 变形方法 */ public void rotateRigthAction() { tetromino.rotateRigth(); if (outOfBounds() || coincide()) { tetromino.rotateLeft(); } } /** * 正在下落的4格方块右移 */ public void moveRigthAction() { // 正在下落的方块右移 tetromino.moveRigth(); // 判断是否出界;coincide:重合;检查4格方块是否与墙上方块是否重合 if (outOfBounds() || coincide()) { // 如果出界,立刻左移 tetromino.moveLeft(); } } /** * 正在下落的4格方块左移 */ public void moveLeftAction() { tetromino.moveLeft(); if (outOfBounds() || coincide()) { tetromino.moveRigth(); } } /** * 检查正在下落的格子是否出界 * * @return */ public boolean outOfBounds() { // 正在下落的4个格子中任意一个格子出界,就是出界 Cell[] cells = tetromino.cells; for (int i = 0; i < cells.length; i++) { Cell cell = cells[i]; int row = cell.getRow(); int col = cell.getCol(); if (row < 0 || row >= ROWS || col < 0 || col >= COLS) { return true; } } return false; } /** * 判断格子是否重合 * * @return */ public boolean coincide() { Cell[] cells = tetromino.cells; for (int i = 0; i < cells.length; i++) { Cell cell = cells[i]; int row = cell.getRow(); int col = cell.getCol(); if (wall[row][col] != null) { return true; } } return false; } /** * 下落方法,直接下落到底部,并且进入到墙内 */ public void hardDropAction() { while (canDrop()) { tetromino.softDrop(); } landIntoWall(); int lines = destroyLines(); this.lines += lines; this.score += souseTable[lines]; if (!isGameOver()) { tetromino = nextOne; nextOne = tetromino.randomOne(); } } /** * 下落方法,一格一格的下落 */ public void softDropAction() { // 1、如果4格方块能下落,就下落 // 2、如果不能下落,就着陆到墙里面 // 3、检查行是否满,销毁已经慢的行 // 4、检查游戏是否结束,如果没有结束,就产生下一个方块 if (canDrop()) { tetromino.softDrop(); } else { this.landIntoWall(); int lines = destroyLines(); // 计算销毁的行数 this.lines = this.lines + lines; // 计算得分 this.score = this.score + souseTable[lines]; if (!isGameOver()) { tetromino = nextOne; nextOne = tetromino.randomOne(); } } } /** * 检查方块是否能够下落 */ private boolean canDrop() { // 1、4格方块的任意一个格子的行达到19,就不能下落 // 2、4格方块的任意一个格子,对应墙上的下方出现格子,则不能下落 // 3、先判断第一 种情况,不然会出现下标越界的错误 Cell[] cells = tetromino.cells; for (int i = 0; i < cells.length; i++) { Cell cell = cells[i]; int row = cell.getRow(); if (row == ROWS - 1) { return false; } } // 判断格子下方的墙上是否有格子 for (int i = 0; i < cells.length; i++) { Cell cell = cells[i]; int row = cell.getRow(); int col = cell.getCol(); if (wall[row + 1][col] != null) { return false; } } return true; } /** * 着陆到墙里面 */ private void landIntoWall() { // 获取每个格子的行、列,根据每个格子的位置,将格子订到墙上 Cell[] cells = tetromino.cells; for (Cell cell : cells) { int row = cell.getRow(); int col = cell.getCol(); wall[row][col] = cell; } } /** * 销毁已经满的行,返回销毁行数 */ private int destroyLines() { // 从0~19逐行查找,如果找到满行,就删除这行 int lines = 0; for (int row = 0; row < ROWS; row++) { if (isFullCells(row)) { deleteRow(row); lines++; } } return lines; } /** * 检查row行的格子是否是满的 * * @param row * @return */ private boolean isFullCells(int row) { Cell[] line = wall[row]; /** * for(int i=0;i<line.length;i++){ Cell cell = line[i]; } */ for (Cell cell : line) { if (cell == null) { return false; } } return true; } /** * 删除row行格子 * * @param row */ private void deleteRow(int row) { for (int i = row; i >= 1; i--) { // 复制:从wall[i-1] -> wall[i] System.arraycopy(wall[i - 1], 0, wall[i], 0, COLS); } Arrays.fill(wall[0], null); } /** * 检查游戏是否结束 */ private boolean isGameOver() { // 如果下一个方块没有出场位置了,则游戏结束:就是下一个出场的方块每个格子行列对应的墙上位置如果有方块,就游戏结束 Cell[] cells = nextOne.cells; for (int i = 0; i < cells.length; i++) { Cell cell = cells[i]; int row = cell.getRow(); int col = cell.getCol(); if (wall[row][col] != null) { return true; } } return false; } } ```

给JPanel面板添加键盘监听后监听失效了。

之前在建立了面板A,并且添加了监听,都能起作用,一切正常, 但是后来又向窗体里面添加了另一个面板B, 再次运行时监听不再对A起作用了,反倒作用到了B上, B上面我添加的有按钮以及下拉列表等组件,可以看到我按键盘后确实是作用到B上了,但是我想让键盘监听一直作用在A上,而不管如何操作B。 逛了论坛有的说用requestFocus()方法, 试了试,可能还是我哪个地方出错了吧,没解决 希望有知道的大神来解决下这个小问题!谢谢!

java键盘监听无法触发

程序只有一个JFrame,应该不是焦点问题。 import java.awt.Graphics; import java.awt.event.KeyEvent; import java.awt.event.KeyListener; import javax.swing.JFrame; public class GameInterface extends JFrame implements KeyListener{ Tank tank=new Tank(); Bullet bullet=new Bullet(); TankController tc=new TankController(); public GameInterface() { this.addKeyListener(this); this.setFocusable(true); this.setDefaultCloseOperation(EXIT_ON_CLOSE); setBounds(0,0,1500,1000); setVisible(true); } public void paint(Graphics g){ while(true){ tank.clearTank(g); tank.clearMyTank(g); tc.tankDirection(); tank.draw(g); tank.drawMyTank(g); bullet.draw(g); } } public static void main(String[] args){ new GameInterface().repaint(); } @Override public void keyPressed(KeyEvent e) { System.out.println("r"); switch(e.getKeyCode()){ case KeyEvent.VK_RIGHT: Tank.myTank.Dirction=Tank.RIGHT; Tank.myTank.x+=20; break; case KeyEvent.VK_LEFT: Tank.myTank.Dirction=Tank.LEFT; Tank.myTank.x-=20; break; case KeyEvent.VK_UP: Tank.myTank.Dirction=Tank.UP; Tank.myTank.y-=20; break; case KeyEvent.VK_DOWN: Tank.myTank.Dirction=Tank.DOWN; Tank.myTank.y+=20; break;} } @Override public void keyReleased(KeyEvent e) { } @Override public void keyTyped(KeyEvent e) { } }

java如何实现小键盘的监听

frame实现KeyListener的接口,然后在Keypressed的函数中无论如何都监听不到小键盘,只有大键盘有用,VK_PLUS之类的,完全进不去,换成VK_RIGHT就没有问题,求高手解答啊>_<

关于java swing的鼠标事件

package te; import java.awt.BorderLayout; import java.awt.EventQueue; import java.awt.event.MouseAdapter; import java.awt.event.MouseListener; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.border.EmptyBorder; import javax.swing.JList; import com.sun.glass.events.MouseEvent; public class MainFrame extends JFrame { private JPanel contentPane; /** * Launch the application. */ public static void main(String[] args) { EventQueue.invokeLater(new Runnable() { public void run() { try { MainFrame frame = new MainFrame(); frame.setVisible(true); } catch (Exception e) { e.printStackTrace(); } } }); } /** * Create the frame. */ public MainFrame() { 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); JList list = new JList(); contentPane.add(list, BorderLayout.CENTER); list.addMouseListener(new MouseAdapter(){ public void mouseClicked(MouseEvent e){ if(e.getClickCount==2) {} } }); } } 比如如上建立JList,添加鼠标监听后,无法使用getclickcount()方法。而把JList单独拿出去新建个类就可以重写了。是不是因为跟MainFrame在一起所以没法重写mouseClicked方法?有没有办法在mainframe里用的?

JAVA的线程给Jframe添加键盘监听不同时运行

我想用Java写一个俄罗斯方块,其中有一个线程是关于JFrame的键盘监听实现图形的变形,但是监听一直没有同时进行,咋回事。 ``` public class practice1 { public static void main(String[] args) { // RegisterInterface Tetris = new RegisterInterface("俄罗斯方块"); SnakeDemo t = new SnakeDemo(); } } ``` ``` import java.awt.Canvas; import java.awt.Container; import java.awt.Font; import java.awt.Graphics; import java.awt.Graphics2D; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JTextArea; public class SnakeDemo extends JFrame{ private static final long serialVersionUID = 5671798241966272024L; protected static JFrame game = new JFrame(); protected static Container game1 = game.getContentPane(); private JLabel label1 = new JLabel("分 数:"); private JLabel label2 = new JLabel("所花时间:"); private JLabel label3 = new JLabel("说 明:"); protected static JTextArea explain = new JTextArea("此游戏是一个俄罗斯方块简易版本,实现简单地移动,得分,变形的功能," + "外加上一些显示,计时和音效后。\n" + "游戏界面按左右键实现移动,按ESC重新开始,按空格键可以实现暂停和开始,按Shift变形。"); private Font f = new Font("微软雅黑", Font.PLAIN, 15); protected static boolean a = true; private boolean b = true; protected static int x; protected static int y; protected static int i,u; protected static int s2, s3, s4, s5, s6, s7, s8, s1, p = 0; protected int ran2, l; private Graphics g1; Thread e1 = new shift(); public SnakeDemo() { game.setTitle("俄罗斯方块"); game.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); game.setBounds(400, 10, 700, 800); game.setResizable(false); game1.add(label1); label1.setBounds(500, 260, 85, 20); label1.setFont(f); game1.add(label2); label2.setBounds(500, 290, 85, 20); label2.setFont(f); game1.add(label3); label3.setBounds(500, 320, 85, 20); label3.setFont(f); game1.add(explain); explain.setBounds(500, 350, 160, 200); explain.setLineWrap(true); explain.setEditable(false); explain.setOpaque(false); explain.setFont(f); game1.add(new mycanvas()); game.setVisible(true); game.setFocusable(true); } /* * 在绘制图形时x,y表示的是一个图形左下角的坐标,其中每个小方块的长宽都为20, * polygon绘制图形其中s(int)表示生成图形的x轴坐标,每个图形的y轴坐标由一个y计算得到 这里提供了最简单的方块的生成与变形,及生成一个横向的可以变形为一个纵向的。 */ public class mycanvas extends Canvas { public void paint(Graphics g) { g1 = (Graphics2D) g; int max = 7, min = 1; ran2 = (int) (Math.random() * (max - min) + min); ran2 = 1; background(); //绘制背景 //定义线程shift,shift释放则发生变形 if (ran2 == 1) { //如果ran=1则绘制第一种横向方块 i = 0; s1 = 165; s2 = 245; s3 = 245; s4 = 165; y = 25; e1.start(); //调用线程shift while (a) { //while循环实现图形移动 int x1[] = { s1, s2, s3, s4 }; if (i == 0) { //i=0时为横向状态 int y1[] = { y, y, y - 20, y - 20 }; g1.fillPolygon(x1, y1, 4); } if (i == 1) { //i=1时为变形为竖向的状态 int y1[] = { y, y, y - 80, y - 80 }; g1.fillPolygon(x1, y1, 4); } movement(); //调用descend方法实现图形下移 background(); //再次绘制背景 } } } } public void background() { //绘制背景的方法 for (int x2 = 5; x2 <= 405; x2 += 20) { for (int y2 = 5; y2 <= 705; y2 += 20) { g1.drawRect(x2, y2, 20, 20); } } } public void movement() { //图形下移的方法 System.out.println(i); if (i == 0) { //正常状态下移方法 g1.clearRect(s1, y - 40, 80, 20); } if (i == 1) { //变形后下移方法 if (l == 0) { g1.clearRect(s1 + 20, y - 40, 60, 20); l = 1; } g1.clearRect(s1, y - 100, 20, 20); } if (y <= 705) y += 20; else a = false; } } ``` ```import java.awt.event.KeyEvent; import java.awt.event.KeyListener; public class shift extends Thread { public void run() { SnakeDemo.game.addKeyListener(new KeyListener() { // 对Jframe窗体game添加键盘事件监听 public void keyTyped(KeyEvent e) { } public void keyReleased(KeyEvent e) { int code; code = e.getKeyCode(); switch (code) { case KeyEvent.VK_SHIFT: // 如果当shift键释放时发生如下变化 if (SnakeDemo.y >= 85) { // 判断图形是否有充足的Y轴变形,如果有则有横向状态变为竖向状态 synchronized (this) { SnakeDemo.i = 1; SnakeDemo.s2 = SnakeDemo.s1 + 20; SnakeDemo.s3 = SnakeDemo.s2; SnakeDemo.s4 = SnakeDemo.s1; System.out.println("ghjkbnm,ghjklhjklhjk"); } } code = 0; break; default: throw new IllegalArgumentException("Unexpected value: " + code); } } public void keyPressed(KeyEvent e) { } }); } } ```

Java swing 实现对电脑屏幕的鼠标移动事件和键盘输入的监控

通俗点就是一个程序,能够对电脑屏幕上鼠标移动的事件和键盘输入的ascii值进行监控,本人一开始写了一个,但是只是在我的程序cs端内的范围有效,如何实现对整个屏幕的监控,有大神知道吗?

请求大佬支援!!!这个键盘监听事件怎么加上去

``` package game; import java.awt.Button; import java.awt.Color; import java.awt.Graphics; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.KeyEvent; import java.awt.event.KeyListener; import javax.swing.JFrame; public class Window extends JFrame implements Runnable{ static int x1 = 0;//蛇头横坐标 static int y1 = 25;//蛇头纵坐标 Button b[] = new Button[50];//蛇数组 Button fruit = new Button();//水果 boolean flag = true;// 判断是否吃到果实 int x, y;// 水果坐标 Move move = null; public Window() { b[0] = new Button();// 蛇头 b[0].setBounds(x1, y1, 10, 10); b[0].setBackground(Color.blue); add(b[0]); for (int i = 1; i < 50; i++) { b[i] = new Button();// 蛇长度 } if (flag) {// 水果的随机位置 while (flag) { x = (int) (1 + Math.random() * 1175); y = (int) (1 + Math.random() * 800); System.out.println("x-->" + x); System.out.println("y-->" + y); fruit.setBounds(x, y, 10, 10); fruit.setBackground(Color.yellow); add(fruit); flag = false; } } this.addKeyListener(move); setLayout(null); setTitle("Retro Snaker"); setSize(1200, 800); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setVisible(true); } public void run() { while(true) { try { Thread.sleep(500); } catch (InterruptedException e) { e.printStackTrace(); } x1+=5; b[0].setBounds(x1, y1, 10, 10); } } } class Move extends Window implements KeyListener { public void keyTyped(KeyEvent e) { } public void keyPressed(KeyEvent e) { if (e.getKeyCode() == KeyEvent.VK_UP) {// 上 y1 += 5; System.out.println("上"); } if (e.getKeyCode() == KeyEvent.VK_DOWN) {// 下 y1 -= 5; System.out.println("下"); } if (e.getKeyCode() == KeyEvent.VK_LEFT) {// 左 x1 -= 5; System.out.println("左"); } if (e.getKeyCode() == KeyEvent.VK_DOWN) {// 右 x1 += 5; System.out.println("右"); } this.repaint(); } public void keyReleased(KeyEvent e) { } } ```

JAVA键盘事件。。。。。。。。。。

import java.awt.event.KeyEvent; import java.awt.event.KeyListener; import javax.swing.JFrame; import javax.swing.JLabel; public class Demo extends JFrame { public Demo() { JLabel l = new JLabel("没有点击键盘Q键");// 创建标签 add(l);// 添加标签 l.addKeyListener(new KeyListener() {// 为标签添加键盘事件监听 @Override public void keyTyped(KeyEvent e) { // TODO Auto-generated method stub } @Override public void keyReleased(KeyEvent e) { // TODO Auto-generated method stub } @Override public void keyPressed(KeyEvent e) { if (e.getKeyCode() == KeyEvent.VK_Q) {// 如果按下的是Q键 l.setText("点击了Q键");// 更改标签的值 } } }); setSize(200, 200);// 设置大小 setDefaultCloseOperation(EXIT_ON_CLOSE);// 关闭窗口退出程序 setVisible(true);// 窗体可以显示 } public static void main(String[] args) { new Demo(); } } 这里按Q了,它不显示,怎么办????

求救。为什么键盘监听事件不响应了。。

mport java.awt.CardLayout; import java.awt.Color; import java.awt.Dimension; import java.awt.Font; import java.awt.Graphics; import java.awt.Image; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import javax.swing.JFrame; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.Timer; public class GamePanel extends JPanel implements ActionListener { public static final int B_WIDTH = 450; public static final int B_HEIGHT = 450; public static final int DOT_SIZE = 15; public static final int ALL_DOTS = 900; public static final int DELAY = 100; private static final Font gameOverFont = new Font("Verdana", Font.BOLD, 60); public boolean inGame = true; public String playerName; public Timer timer; boolean live = true; JFrame myJFrame = null; Image offScreenImage = null; Snake mySnake = new Snake(); Food f = new Food(); public static void main(String[] args) { new GamePanel().launchGame(); } public void launchGame() { myJFrame = new JFrame(); myJFrame.setTitle("Snake"); myJFrame.setLocation(400,200); myJFrame.setPreferredSize(new Dimension(B_WIDTH, B_HEIGHT)); myJFrame.setContentPane(new WelcomePanel(this)); myJFrame.addKeyListener(new GamePanel().new KeyMonitor()); myJFrame.pack(); myJFrame.setVisible(true); myJFrame.setResizable(false); myJFrame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE); myJFrame.addWindowListener(new WindowAdapter() { @Override public void windowClosing(WindowEvent e) { timer.stop(); int exit = JOptionPane.showConfirmDialog(null, "确定退出吗", "友情提示", JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE); if(exit == JOptionPane.YES_OPTION) { System.exit(0); } else { timer.start(); return; } } }); timer = new Timer(DELAY, this); } public GamePanel() { this.setBackground(Color.BLACK); this.setPreferredSize(new Dimension(B_WIDTH, B_HEIGHT)); this.setFocusable(true); this.addKeyListener(new KeyMonitor()); this.setVisible(false); } @Override protected void paintComponent(Graphics g) { super.paintComponent(g); this.setDoubleBuffered(true); mySnake.checkLive(); if(mySnake.isLive()) { mySnake.draw(g); } else { timer.stop(); this.gameOver(g); } if(f.isLive()) { f.draw(g); } else { f = new Food(); } mySnake.eatFood(f); } private void gameOver(Graphics g) { g.setFont(gameOverFont); } @Override public void actionPerformed(ActionEvent e) { repaint(); } private class KeyMonitor extends KeyAdapter { @Override public void keyPressed(KeyEvent e) { mySnake.keyPressed(e); } } } import java.awt.Color; import java.awt.Dimension; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JButton; import javax.swing.JPanel; import javax.swing.JTextField; public class WelcomePanel extends JPanel implements ActionListener{ GamePanel gp; JButton start = null; JButton help = null; JTextField inputName = null; public WelcomePanel(GamePanel gp) { this.gp = gp; start = new JButton("START"); start.setBackground(Color.RED); start.setBounds(160, 220, 130, 40); start.setForeground(Color.RED); start.addActionListener(this); help = new JButton("HELP"); help.setBackground(Color.RED); help.setBounds(160, 270, 130, 40); help.setForeground(Color.RED); help.addActionListener(this); inputName = new JTextField("请输入你的昵称", 10); inputName.setBounds(160, 160, 150, 40); this.setBackground(Color.BLACK); this.setPreferredSize(new Dimension(GamePanel.B_WIDTH, GamePanel.B_HEIGHT)); this.setLayout(null); this.add(start); this.add(inputName); } @Override public void actionPerformed(ActionEvent e) { if(e.getSource() == start) { gp.playerName = inputName.getText(); System.out.println(gp.playerName); gp.myJFrame.setContentPane(gp); gp.setVisible(true); gp.timer.start(); } else if(e.getSource() == help) { } } } import java.awt.Color; import java.awt.EventQueue; import java.awt.Graphics; import java.awt.event.KeyEvent; import javax.swing.JFrame; public class Snake { GamePanel gp; Direction dir = Direction.R; int x, y, size; private boolean live = true; private int sX[] = new int[GamePanel.ALL_DOTS]; private int sY[] = new int[GamePanel.ALL_DOTS]; public Snake() { size = 2; sX[0] = 1 * GamePanel.DOT_SIZE; sX[1] = 0 * GamePanel.DOT_SIZE; sY[0] = 0 * GamePanel.DOT_SIZE; sY[1] = 0 * GamePanel.DOT_SIZE; } public Snake(int x, int y, GamePanel gp) { this.x = x; this.y = y; this.gp = gp; } public void draw(Graphics g) { move(); Color c = g.getColor(); g.setColor(Color.GREEN); for(int i=0; i<size; i++) { g.fillOval(sX[i], sY[i], GamePanel.DOT_SIZE, GamePanel.DOT_SIZE); } } public void keyPressed(KeyEvent e) { int key = e.getKeyCode(); switch(key) { case KeyEvent.VK_UP : if(dir == Direction.D) break; dir = Direction.U; break; case KeyEvent.VK_DOWN : if(dir == Direction.U) break; dir = Direction.D; break; case KeyEvent.VK_LEFT : if(dir == Direction.R) break; dir = Direction.L; break; case KeyEvent.VK_RIGHT : if(dir == Direction.L) break; dir = Direction.R; break; } } public void move() { for(int i=size-1; i>0; i--) { sX[i] = sX[(i-1)]; sY[i] = sY[(i-1)]; } switch(dir) { case U : sY[0] -= GamePanel.DOT_SIZE; break; case D : sY[0] += GamePanel.DOT_SIZE; break; case L : sX[0] -= GamePanel.DOT_SIZE; break; case R : sX[0] += GamePanel.DOT_SIZE; break; } System.out.println(dir); } public boolean eatFood(Food f) { if(f.fX == sX[0] && f.fY == sY[0]) { f.setLive(false); this.grow(); return true; } return false; } private void grow() { size ++; } public boolean isLive() { return live; } public void setLive(boolean live) { this.live = live; } public void checkLive() { if(sX[0] < 0 || sX[0] >= GamePanel.B_WIDTH || sY[0] < 0 || sY[0] >= GamePanel.B_HEIGHT) { this.setLive(false); } for(int i=1; i<size; i++) { if(sX[0] == sX[i] && sY[0] == sY[i]) { this.setLive(false); break; } } } } import java.awt.Color; import java.awt.Graphics; import java.util.Random; public class Food { public int fX; public int fY; private boolean live = true; private static Random r = new Random(); public Food() { fX = r.nextInt(GamePanel.B_WIDTH / GamePanel.DOT_SIZE) * GamePanel.DOT_SIZE; fY = r.nextInt(GamePanel.B_HEIGHT / GamePanel.DOT_SIZE) * GamePanel.DOT_SIZE; } public void draw(Graphics g) { Color c = g.getColor(); g.setColor(Color.RED); g.fillOval(fX, fY, GamePanel.DOT_SIZE, GamePanel.DOT_SIZE); } public boolean isLive() { return live; } public void setLive(boolean live) { this.live = live; } } public enum Direction { U, D, L, R } 按下键盘 keyPressed方法没有被调用啊。。焦点我设置了还是没用啊 跪求大神

JAVA JTable 自定义CellEditor中定义了键盘事件,输入时确不响应键盘事件?

做了一个JTable,使用了自定义的单元格编辑器,编辑器继承自JTextField。我在编辑器中定义了键盘事件,用于限定这个编辑器只能输入数字。但在我在表格中输入的时候,使用鼠标点击单格后再输入值,可以正常响应键盘事件,但是用键盘选中该单元格后再输入值时,可以输入任意字符,键盘事件不被触发,定义的输入规则无用。请教高手,如何解决这个问题。

如何取消键盘和鼠标的监听事件

我使用jquery在全局添加了键盘和鼠标双击的监听事件,但是我如果想使用某个按钮结束监听,应该jquery 代码如何取消呢。

java swing 事件与画图

java代码 要求画一个圆,两个按钮。一个按钮变大,一个按钮变小。要求添加按钮 监听事件。点击变大圆半径变大,点击变小圆半径变小。设置键盘事件,按下 up,down,left,right圆会向相应的方向移动坐标

Java JTextField文本框事件

我想要事件的功能是这样的:第一个文本框的值改动时,第二个文本框同时做出变动。在下新手,还望各位赐教(麻烦详细点,谢谢)

为什么增加键盘监听后按键盘没有反应

package com.Tank; import java.awt.*; import javax.swing.*; import java.awt.event.*; public class TankGame1 extends JFrame{ MyPanel mp=null; public static void main(String[] args) { // TODO Auto-generated method stub TankGame1 tg=new TankGame1(); } //构造函数 public TankGame1() { mp=new MyPanel(); this.add(mp); mp.setLayout(null); //注册监听 this.addKeyListener(mp); this.setSize(400,300); this.setVisible(true); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } } //我的面板 class MyPanel extends JPanel implements KeyListener { //定义一个我的坦克 Hero hero=null; //构造函数 public MyPanel() { hero=new Hero(100,100); } //重新paint public void paint(Graphics g) { super.paint(g); g.fillRect(0, 0, 400, 300); this.drawTank(hero.getX(), hero.getY(), g, 0, 1); } //画出坦克的函数 public void drawTank(int x,int y,Graphics g,int direct,int type) { //判断是什么类型的坦克 switch (type) { case 0: g.setColor(Color.CYAN); break; case 1: g.setColor(Color.yellow); break; } //判断方向 switch(direct) { //向上 case 0: //画出我的坦克 //1.画出左边矩形 g.fill3DRect(x, y, 5, 30,false); //2.画出右边矩形 g.fill3DRect(x+15, y, 5, 30,false); //3.画出中间矩形 g.fill3DRect(x+5, y+5, 10, 20,false); //4.画出圆形 g.fillOval(x+5, y+10, 10, 10); //5.画出线 g.drawLine(x+10, y+15, x+10, y); break; } } @Override //键按下处理 a:向左 s:向下 w:向上 d:向右 public void keyTyped(KeyEvent arg0) { // TODO Auto-generated method stub if(arg0.getKeyCode()==KeyEvent.VK_W) { //设置我的坦克的方向 this.hero.setDirect(0); this.hero.moveUp(); } else if(arg0.getKeyCode()==KeyEvent.VK_D) { //向右 this.hero.setDirect(1); this.hero.moveRight(); }else if(arg0.getKeyCode()==KeyEvent.VK_S) { //向下 this.hero.setDirect(2); this.hero.moveDown(); }else if(arg0.getKeyCode()==KeyEvent.VK_A) { //向左 this.hero.setDirect(3); this.hero.moveLeft(); } //必须重新绘制panel this.repaint(); System.out.println("按下"+arg0.getKeyChar()); } @Override public void keyPressed(KeyEvent arg0) { // TODO Auto-generated method stub } @Override public void keyReleased(KeyEvent arg0) { // TODO Auto-generated method stub } } //坦克类 class Tank { //横坐标 int x=0; //纵坐标 int y=0; public int getX() { // TODO Auto-generated method stub return x; } public void setX(int x) { this.x = x; } public int getY() { return y; } public void setY(int y) { this.y = y; } //坦克方向 //0:上 1:右 2:下 3:左 int direct=0; //设置坦克的速度 int speed=1; public int getSpeed() { return speed; } public void setSpeed(int speed) { this.speed = speed; } public int getDirect() { return direct; } public void setDirect(int direct) { this.direct = direct; } public Tank(int x,int y) { this.x=x; this.y=y; } } //我的坦克 class Hero extends Tank { public Hero(int x,int y) { super(x,y); } //坦克向上移动 public void moveUp() { y-=speed; } //坦克向右移动 public void moveRight() { x+=speed; } //坦克向下移动 public void moveDown() { y+=speed; } //坦克向左移动 public void moveLeft() { x-=speed; } } 想做一个坦克大战的游戏,后台可以接收到键盘按键,但是不能控制坦克动起来是怎么回事呢

新手,如何为一个swing程序写一个按某键暂停功能?

比如一个贪吃蛇游戏,现在想在键盘上按一个键暂停游戏,比如游戏时按F5暂停游戏,此时我不知道应该把这个键盘事件注册到哪个事件源上呢?也就是在程序运行中由谁来监听这个键盘事件呢?还请大家指点一下!

Java的按键事件,按了后没有反应

public void keyPressed(KeyEvent arg0) { if(arg0.getKeyCode() == KeyEvent.VK_X){ System.out.println("w s d sb"); } } 执行后,按X键,打印语句没有输出! 求解

上班一个月,后悔当初着急入职的选择了

最近有个老铁,告诉我说,上班一个月,后悔当初着急入职现在公司了。他之前在美图做手机研发,今年美图那边今年也有一波组织优化调整,他是其中一个,在协商离职后,当时捉急找工作上班,因为有房贷供着,不能没有收入来源。所以匆忙选了一家公司,实际上是一个大型外包公司,主要派遣给其他手机厂商做外包项目。**当时承诺待遇还不错,所以就立马入职去上班了。但是后面入职后,发现薪酬待遇这块并不是HR所说那样,那个HR自...

副业收入是我做程序媛的3倍,工作外的B面人生是怎样的?

提到“程序员”,多数人脑海里首先想到的大约是:为人木讷、薪水超高、工作枯燥…… 然而,当离开工作岗位,撕去层层标签,脱下“程序员”这身外套,有的人生动又有趣,马上展现出了完全不同的A/B面人生! 不论是简单的爱好,还是正经的副业,他们都干得同样出色。偶尔,还能和程序员的特质结合,产生奇妙的“化学反应”。 @Charlotte:平日素颜示人,周末美妆博主 大家都以为程序媛也个个不修边幅,但我们也许...

MySQL数据库面试题(2020最新版)

文章目录数据库基础知识为什么要使用数据库什么是SQL?什么是MySQL?数据库三大范式是什么mysql有关权限的表都有哪几个MySQL的binlog有有几种录入格式?分别有什么区别?数据类型mysql有哪些数据类型引擎MySQL存储引擎MyISAM与InnoDB区别MyISAM索引与InnoDB索引的区别?InnoDB引擎的4大特性存储引擎选择索引什么是索引?索引有哪些优缺点?索引使用场景(重点)...

我说我不会算法,阿里把我挂了。

不说了,字节跳动也反手把我挂了。

抖音上很火的时钟效果

反正,我的抖音没人看,别人都有几十万个赞什么的。 发到CSDN上来,大家交流下~ 主要用到原生态的 JS+CSS3。 具体不解释了,看注释: &lt;!DOCTYPE html&gt; &lt;html lang="en"&gt; &lt;head&gt; &lt;meta charset="UTF-8"&gt; &lt;title&gt;Title&lt;/tit...

记录下入职中软一个月(外包华为)

我在年前从上一家公司离职,没想到过年期间疫情爆发,我也被困在家里,在家呆着的日子让人很焦躁,于是我疯狂的投简历,看面试题,希望可以进大公司去看看。 我也有幸面试了我觉得还挺大的公司的(虽然不是bat之类的大厂,但是作为一名二本计算机专业刚毕业的大学生bat那些大厂我连投简历的勇气都没有),最后选择了中软,我知道这是一家外包公司,待遇各方面甚至不如我的上一家公司,但是对我而言这可是外包华为,能...

为什么程序员做外包会被瞧不起?

二哥,有个事想询问下您的意见,您觉得应届生值得去外包吗?公司虽然挺大的,中xx,但待遇感觉挺低,马上要报到,挺纠结的。

手机经常收到"回复TD退订",回还是不回?今天总算是弄清楚了

自从有了微信和QQ,手机短信几乎很少再用了,但是我们手机里面还是经常会收到"回复TD退订"的消息,那到底要不要回复呢?今天就来告诉大家! 信息内容可能包括 推销信息 品牌活动日的时候,会根据你的用户浏览信息,或者购买记录,后续发送一些降价消息。 但是笔者想说我是缺那10块钱的人嘛,我缺的是1000块。 垃圾信息 虽然我们已经不经常用短信功能,但是还是有不少...

当HR压你价,说你只值7K,你该怎么回答?

当HR压你价,说你只值7K时,你可以流畅地回答,记住,是流畅,不能犹豫。 礼貌地说:“7K是吗?了解了。嗯~其实我对贵司的面试官印象很好。只不过,现在我的手头上已经有一份11K的offer。来面试,主要也是自己对贵司挺有兴趣的,所以过来看看……”(未完) 这段话主要是陪HR互诈的同时,从公司兴趣,公司职员印象上,都给予对方正面的肯定,既能提升HR的好感度,又能让谈判气氛融洽,为后面的发挥留足空间。...

面试官问我:如何加载100M的图片却不撑爆内存

还记得当年面试一个面试官问我怎么加载巨图才能不撑爆内存,我没回答上来,他说分片显示,我寻思特么分片能减少内存使用??现在可以打他脸了! 内容扩展 1.图片的三级缓存中,图片加载到内存中,如果内存快爆了,会发生什么?怎么处理? 2.内存中如果加载一张 500*500 的 png 高清图片.应该是占用多少的内存? 3.Bitmap 如何处理大图,如一张 30M 的大图,如何预防 OOM? A...

面试阿里p7,被按在地上摩擦,鬼知道我经历了什么?

面试阿里p7被问到的问题(当时我只知道第一个):@Conditional是做什么的?@Conditional多个条件是什么逻辑关系?条件判断在什么时候执...

又出事了?网站被攻击了?高中生?

北京时间2020年3月27日9点整,如往常一样来到公司,带开电脑,正准备打开Github网站看一会源代码,再开始手头的工作。哟吼,一直打不开,一直出现如下页面: 我想很多网友也尝到了甜头,各大技术群炸开了锅,据网友反馈有攻击者正在发起大规模的中间人挟持,京东和Github等网站等网站都受到了影响。 什么是中间中间人挟持呢? 简而言之,就是攻击者在数据网络传输的过程中,截获传输过程中的数据并篡改...

无代码时代来临,程序员如何保住饭碗?

编程语言层出不穷,从最初的机器语言到如今2500种以上的高级语言,程序员们大呼“学到头秃”。程序员一边面临编程语言不断推陈出新,一边面临由于许多代码已存在,程序员编写新应用程序时存在重复“搬砖”的现象。 无代码/低代码编程应运而生。无代码/低代码是一种创建应用的方法,它可以让开发者使用最少的编码知识来快速开发应用程序。开发者通过图形界面中,可视化建模来组装和配置应用程序。这样一来,开发者直...

培训班出来的人后来都怎么样了?(二)

接着上回说,培训班学习生涯结束了。后面每天就是无休止的背面试题,不是没有头脑的背,培训公司还是有方法的,现在回想当时背的面试题好像都用上了,也被问到了。回头找找面试题,当时都是打印下来天天看,天天背。 不理解呢也要背,面试造飞机,上班拧螺丝。班里的同学开始四处投简历面试了,很快就有面试成功的,刚开始一个,然后越来越多。不知道是什么原因,尝到胜利果实的童鞋,不满足于自己通过的公司,嫌薪水要少了,选择...

面试了一个 31 岁程序员,让我有所触动,30岁以上的程序员该何去何从?

最近面试了一个31岁8年经验的程序猿,让我有点感慨,大龄程序猿该何去何从。

6年开发经验女程序员,面试京东Java岗要求薪资28K

写在开头: 上周面试了一位女程序员,上午10::30来我们部门面试,2B哥接待了她.来看看她的简历: 个人简历 个人技能: ● 熟悉spring mvc 、spring、mybatis 等框架 ● 熟悉 redis 、rocketmq、dubbo、zookeeper、netty 、nginx、tomcat、mysql。 ● 阅读过juc 中的线程池、锁的源...

大三实习生,字节跳动面经分享,已拿Offer

说实话,自己的算法,我一个不会,太难了吧

程序员垃圾简历长什么样?

已经连续五年参加大厂校招、社招的技术面试工作,简历看的不下于万份 这篇文章会用实例告诉你,什么是差的程序员简历! 疫情快要结束了,各个公司也都开始春招了,作为即将红遍大江南北的新晋UP主,那当然要为小伙伴们做点事(手动狗头)。 就在公众号里公开征简历,义务帮大家看,并一一点评。《启舰:春招在即,义务帮大家看看简历吧》 一石激起千层浪,三天收到两百多封简历。 花光了两个星期的所有空闲时...

工作八年,月薪60K,裸辞两个月,投简历投到怀疑人生!

近日,有网友在某职场社交平台吐槽,自己裸辞两个月了,但是找工作却让自己的心态都要崩溃了,全部无果,不是已查看无回音,就是已查看不符合。 “工作八年,两年一跳,裸辞两个月了,之前月薪60K,最近找工作找的心态崩了!所有招聘工具都用了,全部无果,不是已查看无回音,就是已查看不符合。进头条,滴滴之类的大厂很难吗???!!!投简历投的开始怀疑人生了!希望 可以收到大厂offer” 先来看看网...

推荐9个能让你看一天的网站

分享的这9个保证另你意外的网站,每个都非常实用!非常干货!毫不客气的说,这些网站最少值10万块钱。 利用好这些网站,会让你各方面的技能都得到成长,不说让你走上人生巅峰,但对比现在的你,在眼界、学识、技能方面都有质的飞跃。 一、AIRPANO 传送门:https://www.airpano.com/360photo_list.php 这是一个可以躺在家里,就能环游世界的神奇网站。 世界那么大,绝大多...

大牛都会用的IDEA调试技巧!!!

导读 前天面试了一个985高校的实习生,问了他平时用什么开发工具,他想也没想的说IDEA,于是我抛砖引玉的问了一下IDEA的调试用过吧,你说说怎么设置断点...

都前后端分离了,咱就别做页面跳转了!统统 JSON 交互

文章目录1. 无状态登录1.1 什么是有状态1.2 什么是无状态1.3 如何实现无状态1.4 各自优缺点2. 登录交互2.1 前后端分离的数据交互2.2 登录成功2.3 登录失败3. 未认证处理方案4. 注销登录 这是本系列的第四篇,有小伙伴找不到之前文章,松哥给大家列一个索引出来: 挖一个大坑,Spring Security 开搞! 松哥手把手带你入门 Spring Security,别再问密...

月薪22K程序员,打卡迟到10次,收到工资短信一脸懵逼

每家公司为了保证公司员工每天的工作时间,一般都会采用上下班打卡的工作制度,这其实是一个很常见的是,本身也没有什么问题的。正所谓无规矩不成方圆,公司肯定是有公司的规矩,虽然每个员工都很不喜欢这些规矩来束缚我们,但是公司也只是为了能更好的管理员工。但是一家公司如果一成不变的使用打卡制度,而不会去变通管理,也真不一定是好事。 打卡制度特别对于销售部门来说,不但会让公司发展不起来,还很容易丢失员工。但如...

97年世界黑客编程大赛冠军作品(大小仅为16KB),惊艳世界的编程巨作

这是世界编程大赛第一名作品(97年Mekka ’97 4K Intro比赛)汇编语言所写。 整个文件只有4095个字节, 大小仅仅为16KB! 不仅实现了3D动画的效果!还有一段震撼人心的背景音乐!!! 内容无法以言语形容,实在太强大! 下面是代码,具体操作看最后! @echo off more +1 %~s0|debug e100 33 f6 bf 0 20 b5 10 f3 a5...

不要再到处使用 === 了

我们知道现在的开发人员都使用 === 来代替 ==,为什么呢?我在网上看到的大多数教程都认为,要预测 JavaScript 强制转换是如何工作这太复杂了,因此建议总是使用===。这些都...

什么是a站、b站、c站、d站、e站、f站、g站、h站、i站、j站、k站、l站、m站、n站?00后的世界我不懂!

A站 AcFun弹幕视频网,简称“A站”,成立于2007年6月,取意于Anime Comic Fun,是中国大陆第一家弹幕视频网站。A站以视频为载体,逐步发展出基于原生内容二次创作的完整生态,拥有高质量互动弹幕,是中国弹幕文化的发源地;拥有大量超粘性的用户群体,产生输出了金坷垃、鬼畜全明星、我的滑板鞋、小苹果等大量网络流行文化,也是中国二次元文化的发源地。 B站 全称“哔哩哔哩(bilibili...

十个摸鱼,哦,不对,是炫酷(可以玩一整天)的网站!!!

文章目录前言正文**1、Kaspersky Cyberthreat real-time map****2、Finding Home****3、Silk – Interactive Generative Art****4、Liquid Particles 3D****5、WINDOWS93****6、Staggering Beauty****7、Ostagram图片生成器网址****8、全历史网址*...

我真的错了,我被跳槽后的高薪冲昏了头脑...

国内疫情已接近尾声,疫情对生活各个方面造成的影响,就是一场真实的“蝴蝶效应”。“全球最大安全套制造商因疫情停产,已造成一亿个安全套缺口”“口罩印钞机,月入千万的暴富神话”“百程旅行...

终于,月薪过5万了!

来看几个问题想不想月薪超过5万?想不想进入公司架构组?想不想成为项目组的负责人?想不想成为spring的高手,超越99%的对手?那么本文内容是你必须要掌握的。本文主要详解bean的生命...

​能让德国人放弃现金支付​,也没谁了

在新冠疫情中,德国人越来越多地选择在超市,加油站或其他商店付款时使用非接触式付款方式。德国信贷协会Deutschen Kreditwirtschaft (DK) 的一位发言人告诉德国新...

相关热词 c# 局部 截图 页面 c#实现简单的文件管理器 c# where c# 取文件夹路径 c# 对比 当天 c# fir 滤波器 c# 和站 队列 c# txt 去空格 c#移除其他类事件 c# 自动截屏
立即提问