Java 如何在作为BuffereImage()的JFrame中添加JPanel
到目前为止,我有: 逻辑是: a、 )我将按下“S”键,然后游戏开始 b、 )JTextArea将显示用户的对话(注意:我没有出于调试目的禁用它) c、 )JTextField将是用户将键入文本的字段 我有以下工作代码:Java 如何在作为BuffereImage()的JFrame中添加JPanel,java,swing,jframe,jpanel,Java,Swing,Jframe,Jpanel,到目前为止,我有: 逻辑是: a、 )我将按下“S”键,然后游戏开始 b、 )JTextArea将显示用户的对话(注意:我没有出于调试目的禁用它) c、 )JTextField将是用户将键入文本的字段 我有以下工作代码: package game; //import public class Game extends JFrame { public static final String SERVER_IP = "localhost"; public static final
package game;
//import
public class Game extends JFrame {
public static final String SERVER_IP = "localhost";
public static final int WIDTH = 1200;
public static final int HEIGHT = 800;
public static final int SCALE = 1;
private final int FPS = 60;
private final long targetTime = 1000 / FPS;
private BufferedImage backBuffer;
public KeyboardInput input;
private Stage stage;
public String username = "";
public GameClient client;
public static Game game;
public static String message = "";
private Tank tank;
private javax.swing.JButton jButton1;
private javax.swing.JPanel jPanel1;
private javax.swing.JScrollPane jScrollPane1;
private javax.swing.JTextArea jTextArea1;
private javax.swing.JTextField jTextField1;
public Game() throws HeadlessException {
setSize(1000, 1000);
addWindowListener(new WinListener());
setDefaultCloseOperation(EXIT_ON_CLOSE);
setLocationRelativeTo(null);
setResizable(false);
setVisible(true);
//setUndecorated(false);
addKeyListener(input);
setVisible(true);
}
public void init() {
this.game = this;
input = new KeyboardInput();
//this.setSize(WIDTH, HEIGHT);
//this.setLocationRelativeTo(null);
//this.setResizable(false);
Dimension expectedDimension = new Dimension(900, 50);
Dimension expectedDimension2 = new Dimension(100, 50);
jButton1 = new JButton("jButton1");
jTextArea1 = new JTextArea(6,6);
jTextArea1.setBounds(0,200,200,200);
jTextArea1.setBackground(Color.BLUE);
//jTextArea1.setFocusable(false);
jTextField1 = new JTextField("jTextField1");
JPanel panel2 = new JPanel();
panel2.setLayout(new FlowLayout());
panel2.add(jTextField1);
panel2.add(jButton1);
panel2.setBackground(Color.BLACK); // for debug only
panel2.setPreferredSize(expectedDimension);
panel2.setMaximumSize(expectedDimension);
panel2.setMinimumSize(expectedDimension);
jPanel1 = new JPanel();
jPanel1.setLayout(new BoxLayout(jPanel1, BoxLayout.Y_AXIS));
jPanel1.add(jTextArea1);
jPanel1.add(panel2);
jPanel1.setBackground(Color.RED); // for debug only
jPanel1.setPreferredSize(expectedDimension2);
jPanel1.setMaximumSize(expectedDimension2);
jPanel1.setMinimumSize(expectedDimension2);
jScrollPane1 = new JScrollPane(jPanel1,JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
setContentPane(jScrollPane1);
System.out.println("init");
revalidate();
client = new GameClient(SERVER_IP, this);
backBuffer = new BufferedImage(800* SCALE,600 * SCALE, BufferedImage.TYPE_INT_RGB);
}
public Stage getStage() {
return stage;
}
public class WinListener extends WindowAdapter {
@Override
public void windowClosing(WindowEvent e) {
disconnect();
System.exit(0);
}
}
public void disconnect() {
Packet01Disconnect p = new Packet01Disconnect(username);
p.writeData(client);
client.closeSocket();
System.exit(0);
}
private Font font = new Font("Munro Small", Font.PLAIN, 96);
private Font font2 = new Font("Munro Small", Font.PLAIN, 50);
private Font fontError = new Font("Munro Small", Font.PLAIN, 25);
private int op = 0;
public void updateMenu() {
if (input.up.isPressed()) {
if (op == 1) {
op = 0;
} else {
op++;
}
input.up.toggle(false);
} else if (input.down.isPressed()) {
if (op == 0) {
op = 1;
} else {
op--;
}
input.down.toggle(false);
} else if (input.enter.isPressed() && op == 0) {
runningMenu = false;
input.enter.toggle(false);
} else if (input.enter.isPressed() && op == 1) {
System.exit(0);
}
}
public void drawMenu() {
Graphics g = getGraphics();
Graphics bbg = backBuffer.getGraphics();
bbg.setFont(font);
bbg.setColor(Color.white);
bbg.drawString("Sample", 189, 180);
bbg.setFont(font2);
if (op == 0) {
bbg.setColor(Color.red);
bbg.drawString("Start", 327, 378);
bbg.setColor(Color.white);
bbg.drawString("Quit", 342, 425);
} else if (op == 1) {
bbg.setColor(Color.white);
bbg.drawString("Start", 327, 378);
bbg.setColor(Color.red);
bbg.drawString("Quit", 342, 425);
}
g.drawImage(backBuffer, 0, 0, this);
}
public void draw() {
Graphics g = getGraphics();
Graphics bbg = backBuffer.getGraphics();
bbg.setColor(Color.black);
bbg.fillRect(0, 0, WIDTH, HEIGHT);
stage.drawStage(bbg, this);
for (Tank t : stage.getPlayers()) {
t.draw(bbg, SCALE, this);
}
g.drawImage(backBuffer, 0, 0, this);
}
public void update() {
tank.update(stage);
stage.update();
}
private long time = 0;
public void updateLogin() {
if (username.length() < 8) {
if (input.letter.isPressed()) {
username += (char) input.letter.getKeyCode();
input.letter.toggle(false);
}
}
if (input.erase.isPressed() && username.length() > 0) {
username = username.substring(0, username.length() - 1);
input.erase.toggle(false);
}
if (input.enter.isPressed() && username.length() > 0) {
input.enter.toggle(false);
time = System.currentTimeMillis();
Packet00Login packet = new Packet00Login(username, 0, 0, 0);
packet.writeData(client);
}
if (message.equalsIgnoreCase("connect server success")) {
time = 0;
runningLogin = false;
return;
}
if (message.equalsIgnoreCase("Username already exists")) {
drawLogin();
try {
Thread.sleep(1000);
} catch (InterruptedException ex) {
}
message = "";
username = "";
time = 0;
}
if (message.equalsIgnoreCase("Server full")) {
drawLogin();
try {
Thread.sleep(2000);
} catch (Exception e) {
}
System.exit(0);
}
if (time != 0 && message.equals("") && (System.currentTimeMillis() - time) >= 5000) {
message = "cannot connect to the server";
drawLogin();
try {
Thread.sleep(2000);
} catch (InterruptedException ex) {
}
message = "";
time = 0;
}
}
public void drawLogin() {
Graphics g = getGraphics();
Graphics bbg = backBuffer.getGraphics();
bbg.setColor(Color.black);
bbg.fillRect(0, 0, 800, 600);
bbg.setColor(Color.red);
bbg.setFont(fontError);
bbg.drawString(message, 100, 100);
bbg.setFont(font2);
bbg.setColor(Color.white);
bbg.drawString("Username", 284, 254);
bbg.setColor(Color.red);
bbg.drawString(username, 284, 304);
g.drawImage(backBuffer, 0, 0, this);
}
public static String waitPlayers = "Waiting for others players";
public String auxWaitPlayers = waitPlayers;
public static int quantPlayers = 0;
public class StringWait extends Thread {
public void run() {
while (true) {
try {
waitPlayers = "waiting for others players";
Thread.sleep(1000);
waitPlayers = "waiting for others players.";
Thread.sleep(1000);
waitPlayers = "waiting for others players..";
Thread.sleep(1000);
waitPlayers = "waiting for others players...";
Thread.sleep(1000);
} catch (InterruptedException ex) {
}
}
}
}
public void updateWaitPlayers() {
if (quantPlayers == 1) {
runningWaitPlayer = false;
}
}
public void drawWaitPlayers() {
Graphics g = getGraphics();
Graphics bbg = backBuffer.getGraphics();
bbg.setColor(Color.black);
bbg.fillRect(0, 0, 800, 600);
bbg.setColor(Color.white);
bbg.setFont(fontError);
bbg.drawString(waitPlayers, 100, 100);
g.drawImage(backBuffer, 0, 0, this);
}
public boolean runningMenu = true, runningLogin = true, runningWaitPlayer = true, runningGame = true;
public int op2 = 0;
public void start() {
long start;
long elapsed;
long wait;
init();
while (true) {
runningGame = true;
runningMenu = true;
runningWaitPlayer = true;
runningLogin = true;
switch (op2) {
//..
}
}
public void setGameState(boolean state) {
//...
}
public static void main(String[] args) throws InterruptedException {
Game g = new Game();
Thread.sleep(1000);
g.start();
}
打包游戏;
//进口
公共类游戏扩展JFrame{
公共静态最终字符串服务器\u IP=“localhost”;
公共静态最终整数宽度=1200;
公共静态最终内部高度=800;
公共静态最终整数比例=1;
私人最终整数FPS=60;
私人最终长目标时间=1000/FPS;
专用缓冲映像backBuffer;
公用键盘输入;
私人舞台;
公共字符串用户名=”;
公共游戏客户端;
公共静态博弈;
公共静态字符串消息=”;
私家坦克;
私有javax.swing.JButton jButton1;
私有javax.swing.JPanel jPanel1;
私有javax.swing.JScrollPane-jScrollPane1;
私有javax.swing.JTextArea jTextArea1;
私有javax.swing.JTextField jTextField1;
公共游戏()抛出无头例外{
设置大小(10001000);
addWindowListener(新的WinListener());
setDefaultCloseOperation(关闭时退出);
setLocationRelativeTo(空);
可设置大小(假);
setVisible(真);
//未装饰的刚毛(假);
addKeyListener(输入);
setVisible(真);
}
公共void init(){
这个游戏=这个;
输入=新键盘输入();
//此.setSize(宽度、高度);
//此.setLocationRelativeTo(空);
//此参数为.setresizeable(false);
预期尺寸尺寸=新尺寸(900,50);
预期尺寸尺寸2=新尺寸(100,50);
jButton1=新JButton(“jButton1”);
jTextArea1=新的JTextArea(6,6);
jTextArea1.立根(02002002000);
JTextArea 1.立根背景(颜色:蓝色);
//jTextArea1.setFocusable(假);
jTextField1=新的JTextField(“jTextField1”);
JPanel panel2=新的JPanel();
panel2.setLayout(新的FlowLayout());
面板2.添加(jTextField1);
面板2.添加(jButton1);
panel2.setBackground(颜色.黑色);//仅用于调试
面板2.设置首选尺寸(预期尺寸);
面板2.设置最大尺寸(预期尺寸);
面板2.设置最小尺寸(预期尺寸);
jPanel1=新的JPanel();
setLayout(新的BoxLayout(jPanel1,BoxLayout.Y_轴));
jPanel1.add(jTextArea1);
jPanel1.add(第2组);
jPanel1.setBackground(Color.RED);//仅用于调试
jPanel1.setPreferredSize(预期尺寸2);
jPanel1.设置最大尺寸(预期尺寸2);
jPanel1.设置最小尺寸(预期尺寸2);
jScrollPane1=新的JScrollPane(jPanel1,JScrollPane.VERTICAL\u SCROLLBAR\u ALWAYS,JScrollPane.HORIZONTAL\u SCROLLBAR\u ALWAYS);
setContentPane(jScrollPane1);
System.out.println(“init”);
重新验证();
客户端=新游戏客户端(服务器IP,此);
backBuffer=新的BuffereImage(800*比例,600*比例,BuffereImage.TYPE_INT_RGB);
}
公共舞台getStage(){
返回阶段;
}
公共类WinListener扩展了WindowAdapter{
@凌驾
公共无效窗口关闭(WindowEvent e){
断开连接();
系统出口(0);
}
}
公共空间断开连接(){
Packet01Disconnect p=新Packet01Disconnect(用户名);
p、 书面资料(客户);
client.closeSocket();
系统出口(0);
}
私有字体=新字体(“Munro Small”,Font.PLAIN,96);
私有字体font2=新字体(“Munro-Small”,Font.PLAIN,50);
private Font fontError=新字体(“Munro Small”,Font.PLAIN,25);
私有int op=0;
public void updateMenu(){
if(input.up.isPressed()){
如果(op==1){
op=0;
}否则{
op++;
}
input.up.toggle(假);
}else if(input.down.isPressed()){
如果(op==0){
op=1;
}否则{
op--;
}
input.down.toggle(假);
}else if(input.enter.isPressed()&&op==0){
runningMenu=false;
输入.输入.切换(false);
}else if(input.enter.isPressed()&&op==1){
系统出口(0);
}
}
公共菜单(){
Graphics g=getGraphics();
Graphics bbg=backBuffer.getGraphics();
bbg.setFont(字体);
bbg.setColor(颜色:白色);
bbg.抽绳(“样本”,189、180);
bbg.setFont(font2);
如果(op==0){
bbg.setColor(颜色为红色);
bbg.抽绳(“开始”,327378);
bbg.setColor(颜色:白色);
bbg.抽绳(“退出”,342425);
}else if(op==1){
bbg.setColor(颜色:白色);
bbg.抽绳(“开始”,327378);
bbg.setColor(颜色为红色);
bbg.抽绳(“退出”,342425);
}
g、 drawImage(backBuffer,0,0,this);
}
公众抽签(){
Graphics g=getGraphics();
Graphics bbg=backBuffer.getGraphics();
bbg.setColor(颜色为黑色);
bbg.fillRect(0,0,宽度,高度);
阶段。牵引阶段(bbg,本);
对于(坦克t:stage.getPlayers()){
t、 绘制(bbg、比例、本);
}
g、 drawImage(backBuffer,0,0,this);
}
公共无效更新(){
坦克更新(阶段);
stage.update();
}
私人长时间=0;
public void updateLogin(){
if(username.length()<8){
if(input.letter.isPressed()){
username+=(char)input.letter.getKeyCode();
输入.letter.toggle(假);
}
}
if(input.erase.isPressed()&&username.length()>0){
username=username.substring(0,username.length()-1);
输入.擦除.切换(假);
}
if(input.enter.isPressed()&&username.length()>0){
输入.输入.切换(false);
时间=System.currentTimeMillis();
Packet00Login packet=新的Packet00Login(用户名,0,0,0);
packet.writeData(客户端);
}
if(message.equalsIgnoreCase(“连接服务器成功”)){
时间=0;
runningLogin=false;
回来
}
if(message.equalsIgnoreCase(“用户名已存在”)){
drawLogin();
试一试{
睡眠(1000);
}捕获(中断异常例外){
}
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
public class Test {
public static void main(String[] args) {
new Test();
}
public Test() {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
ex.printStackTrace();
}
JPanel master = new JPanel(new BorderLayout());
master.setBackground(Color.BLUE);
JPanel gameInterface = new JPanel() {
@Override
public Dimension getPreferredSize() {
return new Dimension(400, 400);
}
};
gameInterface.setBackground(Color.MAGENTA);
master.add(gameInterface);
JPanel interactions = new JPanel(new BorderLayout());
interactions.add(new JScrollPane(new JTextArea(5, 20)));
JTextField field = new JTextField(15);
JButton btn = new JButton("Button");
JPanel message = new JPanel(new GridBagLayout());
GridBagConstraints gbc = new GridBagConstraints();
gbc.gridx = 0;
gbc.weightx = 1;
gbc.fill = GridBagConstraints.HORIZONTAL;
message.add(field, gbc);
gbc.gridx = 1;
gbc.weightx = 0;
message.add(btn, gbc);
interactions.add(message, BorderLayout.SOUTH);
master.add(interactions, BorderLayout.SOUTH);
JFrame frame = new JFrame("Testing");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(master);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
});
}
}