gpt4 book ai didi

java - 如何让一个面板在另一个面板内工作?

转载 作者:行者123 更新时间:2023-11-29 04:43:42 25 4
gpt4 key购买 nike

对于我正在制作的游戏,我希望玩家从菜单屏幕 (Panel05) 开始,然后单击按钮开始实际游戏 (Panel00)。而且,在玩游戏时,如果他们赢了或输了,当他们点击另一个按钮时,他们要么返回菜单,要么进入另一个级别。现在,面板都是独立的程序,有自己的驱动程序,我不确定如何让一个面板在另一个面板中工作,如果可能的话。我将不胜感激任何和所有的建议、答案或批评。下面是菜单面板

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.image.BufferedImage;


public class Panel05 extends JPanel
{
private BufferedImage myImage;
private Graphics myBuffer;
public JButton button1;

public Panel05()
{

myImage = new BufferedImage(1000, 1000, BufferedImage.TYPE_INT_RGB);
myBuffer = myImage.getGraphics();




setLayout(null);


button1 = new JButton();
button1.setSize(100, 100);
button1.setLocation(500,500);
button1.setForeground(Color.WHITE);
button1.setFont(new Font("Serif", Font.BOLD, 30));
button1.setText("Start");
button1.addActionListener(new B1Listener());
button1.setBorder(null);
button1.setOpaque(false);
button1.setContentAreaFilled(false);
button1.setBorderPainted(false);
add(button1);
setFocusable(true);
}


public void paintComponent(Graphics g)
{
ImageIcon Nintendo = new ImageIcon("trumpL.png");

g.drawImage(Nintendo.getImage(), 0, 0, 1000, 1000, null);

}

private class B1Listener implements ActionListener
{
public void actionPerformed(ActionEvent e)
{


}
}
}

这是游戏实际第一关的面板。

 import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.image.BufferedImage;
import javax.swing.Timer;


public class Panel00 extends JPanel
{
private BufferedImage myImage;
private Graphics myBuffer;
public Timer timer;
public JButton button1;
public JButton button2;
public JLabel label1 = new JLabel("Good Choice!");
public JLabel label2 = new JLabel("You're Fired!!");
public int x = 5; //CountDown from 5
public int delay = 1000; //milliseconds
boolean drawWin = false;
boolean drawLose = false;



public Panel00()
{

myImage = new BufferedImage(1000, 1000, BufferedImage.TYPE_INT_RGB);
myBuffer = myImage.getGraphics();




setLayout(null);


button1 = new JButton();
button1.setSize(300, 200);
button1.setLocation(100,150);
button1.setFont(new Font("Serif", Font.BOLD, 18));
button1.setText("<html><center>"+"Until we are able to determine and understand this problem"+"<br>"+" and the dangerous threat it poses, our country cannot be the victims of horrendous attacks"+"<br>"+"by people that believe only in Jihad, and have no sense of reason or respect for human life"+"</center></html>");
button1.addActionListener(new B1Listener());
button1.setBorder(null);
button1.setOpaque(false);
button1.setContentAreaFilled(false);
button1.setBorderPainted(false);
add(button1);

button2 = new JButton();
button2.setSize(300, 200);
button2.setLocation(600,150);
button2.setFont(new Font("Serif", Font.BOLD, 18));
button2.setText("<html><center>"+"If ISIS wants to fight, fine with us. "+"<br>"+"We have wanted that fight for a long time. There is no room in the world for ISIS any more."+"<br>"+"The Muslims or us, one of us will have to go."+"</center></html>");
button2.addActionListener(new B2Listener());
button2.setBorder(null);
button2.setOpaque(false);
button2.setContentAreaFilled(false);
button2.setBorderPainted(false);
add(button2);

ActionListener counter =
new ActionListener()
{
public void actionPerformed(ActionEvent evt)
{
repaint();
x--;
if (x == 0)
{
timer.stop();
}
}
};
timer = new Timer(delay, counter);
timer.start();


setFocusable(true);
}


public void paintComponent(Graphics g)
{
ImageIcon Nintendo = new ImageIcon("trump speech.jpg");

g.drawImage(Nintendo.getImage(), 0, 0, 1000, 1000, null);

ImageIcon N = new ImageIcon("happy.JPG");

g.setColor(Color.WHITE);
g.fillOval(90,100,320,320);

g.setColor(Color.WHITE);
g.fillOval(590,100,320,320);

g.setColor(Color.WHITE);
g.setFont(new Font("Serif",Font.BOLD, 50));
g.drawString(""+x,500,50);

if (drawWin)
{
g.drawImage(N.getImage(), 0, 0, 1000, 1000, null);
}
ImageIcon L = new ImageIcon("loser.JPG");
if (drawLose)
{
g.drawImage(L.getImage(), 0, 0, 1000, 1000, null);
}

}

private class B1Listener implements ActionListener
{
public void actionPerformed(ActionEvent e)
{
repaint();
drawWin = true;

label1.setLocation(250,650);
label1.setSize(1000, 400);
label1.setForeground(new Color(212, 175, 55));
label1.setFont(new Font("Serif", Font.BOLD, 100));
add(label1);

button1.setEnabled(false);
button2.setEnabled(false);

button1.setText("");
button2.setText("");

timer.stop();

}
}

private class B2Listener implements ActionListener
{
public void actionPerformed(ActionEvent e)
{
repaint();
drawLose = true;

label2.setLocation(500,700);
label2.setSize(400, 400);
label2.setForeground(Color.RED);
label2.setFont(new Font("Serif", Font.BOLD, 40));
add(label2);

button1.setEnabled(false);
button2.setEnabled(false);

button1.setText("");
button2.setText("");


timer.stop();
}
}
}

最佳答案

建议:

  • 首先,也是最重要的,使用 CardLayout 交换 JPanel。您将需要另一个 JPanel,一个使用 CardLayout 的 JPanel,您将使用适当的字符串 constant 将上面的两个 JPanel 添加到第一个 JPanel,然后您可以随意交换 JPanel。 CardLayout Tutorial会告诉你怎么做。我已经发布了一些可以在 these links 中找到的代码. Here's a nice one .
  • 代码中的其他严重问题——首先,永远不要在 paintComponent 方法中读取图像或任何其他文件。这种方法主要决定了您的 GUI 的感知响应能力,您永远不想减慢它的速度。而且,为什么要这样做?为什么不读入图像一次,将其存储在一个变量中,然后就完成了?
  • 还要在覆盖中调用 super.paintComponent(...) 方法,否则您可能无法清除 GUI 中的脏像素。
  • 还要避免像瘟疫一样使用空布局。虽然空布局和 setBounds() 对于 Swing 新手来说似乎是创建复杂 GUI 的最简单和最好的方法,但您创建的 Swing GUI 越多,使用它们时遇到的困难就越严重。当 GUI 调整大小时,它们不会调整组件的大小,它们是增强或维护的皇家女巫,当放置在滚动 Pane 中时它们会完全失败,当在所有平台或与原始屏幕分辨率不同的屏幕分辨率上查看时,它们看起来很糟糕.

关于java - 如何让一个面板在另一个面板内工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38153859/

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