gpt4 book ai didi

Java Awt 和 Swing

转载 作者:行者123 更新时间:2023-12-02 04:19:09 27 4
gpt4 key购买 nike

Pong.Java

import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

import javax.swing.JFrame;

public class Pong {
private static final int WIDTH = 900, HEIGHT = 700;
JFrame win = new JFrame();
Paddle paddleOne = new Paddle(1);
Paddle paddleTwo = new Paddle(2);
Graphics g;

Pong(){
init();
}

void init(){
win.setTitle("PONG");
win.setSize(WIDTH, HEIGHT);
win.addKeyListener(keyListener);
win.setLocationRelativeTo(null);
win.getContentPane().setBackground(Color.black);
win.setVisible(true);
win.getContentPane().validate();
win.repaint();
}


public void paintComponent(Graphics g){
g.setColor(Color.white);
g.fillRect(paddleOne.getX(), paddleOne.getY(), paddleOne.getHEIGHT(), paddleOne.getWIDTH());

System.out.println("drawn");
}

KeyListener keyListener = new KeyListener() {
public void keyPressed(KeyEvent e) {
int key = e.getKeyCode();

switch(key){
case 87:
System.out.println("Player 1 Up");
break;
case 83:
System.out.println("Player 1 Down");
break;
case 38:
System.out.println("Player 2 Up");
break;
case 40:
System.out.println("Player 2 Down");
break;
}

win.getContentPane().validate();
win.repaint();

}

public void keyReleased(KeyEvent arg0) {
// TODO Auto-generated method stub

}

public void keyTyped(KeyEvent arg0) {
// TODO Auto-generated method stub

}

};

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

Paddle.Java

public class Paddle{
private int WIDTH = 50, HEIGHT = 150, X, Y;


int playerNum;

Paddle(int playerNum){
if(playerNum == 1){
X = 10;
Y = 10;
}else if (playerNum == 2){
X = 500;
Y = 10;
}
}

public void setX(int x){
X = x;
}

public void setY(int y){
Y = y;
}

public int getWIDTH() {
return WIDTH;
}

public int getHEIGHT() {
return HEIGHT;
}

public int getX() {
return X;
}

public int getY() {
return Y;
}

}

我对 Java 编程,或者更具体地说,Awt 和 Swing 比较陌生,我的问题是,为什么我的矩形没有绘制?任何帮助表示赞赏。非常感谢!

最佳答案

为了在 Swing 中绘制某些内容,它首先必须从 Swing 知道如何绘制的内容扩展,这通常意味着 JComponent (或更典型的是 JPanel )。

然后你可以重写其中一个绘画方法,该方法由绘画子系统调用,在这种情况下,通常首选重写 paintComponent ,但别忘了调用super.paintComponent在进行任何自定义绘画之前,或者您正在为自己设置一些奇怪且通常不可预测的绘画问题。

看看Painting in AWT and SwingPerforming Custom Painting了解更多详情。

import java.awt.Color;
import java.awt.EventQueue;
import java.awt.Graphics;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;

public class Pongo {

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

public Pongo() {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
ex.printStackTrace();
}

JFrame frame = new JFrame("Testing");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(new PongPane());
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
});
}

public class PongPane extends JPanel {

private static final int WIDTH = 900, HEIGHT = 700;
Paddle paddleOne = new Paddle(1);
Paddle paddleTwo = new Paddle(2);

public PongPane() {
setBackground(Color.BLACK);
}

@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
g.setColor(Color.white);
g.fillRect(paddleOne.getX(), paddleOne.getY(), paddleOne.getHEIGHT(), paddleOne.getWIDTH());

//System.out.println("drawn"); //Should not put something here which may overhead.
}

}

public class Paddle {

private int WIDTH = 50, HEIGHT = 150, X, Y;

int playerNum;

Paddle(int playerNum) {
if (playerNum == 1) {
X = 10;
Y = 10;
} else if (playerNum == 2) {
X = 500;
Y = 10;
}
}

public void setX(int x) {
X = x;
}

public void setY(int y) {
Y = y;
}

public int getWIDTH() {
return WIDTH;
}

public int getHEIGHT() {
return HEIGHT;
}

public int getX() {
return X;
}

public int getY() {
return Y;
}
}
}

我也不鼓励使用 KeyListener在此上下文和内部建议中使用键绑定(bind) API,它不会遇到 KeyListener 相同的焦点相关问题。做。请参阅How to Use Key Bindings了解更多详情

关于Java Awt 和 Swing,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32982486/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com