Java 更新面板的背景图像
当我想更改“面板”的背景时,我在更新“面板”时遇到问题 在我的程序中,每当你在面板中点击一定次数时,面板就会改变它的背景,但我很难做到这一点 这是我的密码 这是构造函数/gui类Java 更新面板的背景图像,java,swing,user-interface,jpanel,Java,Swing,User Interface,Jpanel,当我想更改“面板”的背景时,我在更新“面板”时遇到问题 在我的程序中,每当你在面板中点击一定次数时,面板就会改变它的背景,但我很难做到这一点 这是我的密码 这是构造函数/gui类 import java.awt.*; import javax.swing.*; import javax.swing.text.*;; public class demo { JFrame frame = new JFrame ("Idle Game Test!"); JPanel backGroundPanel
import java.awt.*;
import javax.swing.*;
import javax.swing.text.*;;
public class demo {
JFrame frame = new JFrame ("Idle Game Test!");
JPanel backGroundPanel = new JPanel ();
static JPanel statusPanel = new JPanel();
JPanel buttonPanel = new JPanel ();
JPanel bigPanel = new JPanel ();
static JTextArea message = new JTextArea (34,43);
//MessageDisplay msg = new MessageDisplay ();
//Constructor
demo () {
//gets the dimension of the screen
Dimension dim = Toolkit.getDefaultToolkit().getScreenSize();
backGroundClass bgc = new backGroundClass ();
frame.setSize (850,700);
frame.setResizable (false);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible (true);
//get size in pixels
int w = frame.getSize().width;
int h = frame.getSize().height;
int x = (dim.width - w)/2;
int y = (dim.height - h)/2;
//set the location
frame.setLocation (x,y);
backGroundPanel.setLayout (null);
backGroundPanel.setBackground (Color.DARK_GRAY);
frame.add (backGroundPanel);
statusPanel.setSize(250, 600);
statusPanel.setLocation (15,55);
statusPanel.add(bgc.panel);
statusPanel.addMouseListener(new mouseEvent ());
backGroundPanel.add (statusPanel);
buttonPanel.setSize (550,100);
buttonPanel.setLocation (280,555);
backGroundPanel.add (buttonPanel);
JScrollPane scroll = new JScrollPane (message, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
DefaultCaret caret = (DefaultCaret)message.getCaret();
caret.setUpdatePolicy(DefaultCaret.ALWAYS_UPDATE);
message.setWrapStyleWord(true);
message.setLineWrap(true);
message.setBackground (Color.gray);
message.setEditable (true);
message.setForeground(Color.white);
message.setFont(new Font ("Georgia", Font.PLAIN, 12));
message.setEditable(false);
//message.setSize (500,500);
bigPanel.add(scroll);
bigPanel.setSize (550, 490);
bigPanel.setLocation (280,55);
backGroundPanel.add (bigPanel);
}
}
制作带有背景的面板的类
import java.awt.*;
import javax.swing.*;
@SuppressWarnings("serial")
class backGroundClass extends JPanel {
//ImagePanel panel = new ImagePanel(new ImageIcon("images/background.png").getImage());
int controlNumber = 0 ;
String []imagePath= {"Image1Ulquiora.jpg","Image2Diva.jpg","Image2DivaSized.jpg","Image3GirlInSword.jpg"};
ImageIcon icon = new ImageIcon (getClass().getResource(imagePath[controlNumber]));
ImagePanel panel = new ImagePanel (icon.getImage());
}
@SuppressWarnings("serial")
class ImagePanel extends JPanel {
private Image img;
public ImagePanel(String img) {
this(new ImageIcon(img).getImage());
}
public ImagePanel(Image img) {
this.img = img;
Dimension size = new Dimension(img.getWidth(null), img.getHeight(null));
setPreferredSize(size);
setMinimumSize(size);
setMaximumSize(size);
setSize(size);
setLayout(null);
}
public void paintComponent(Graphics g) {
g.drawImage(img, 0, 0, null);
}
}
以及假设要更新面板的操作事件(我不确定这是否正确或XD是什么)
导入java.awt.event.*;
公共类mouseEvent实现MouseListener{
backGroundClass bgc=新的backGroundClass();
@凌驾
公共无效mouseClicked(MouseEvent e){
如果(!MainProg.flag){
demo.message.append(Integer.toString(例如getClickCount());
}
如果(如getClickCount()>5){
bgc.controlNumber=3;
bgc.panel.repaint();//这不起作用:<
demo.statusPanel.revalidate();//这也是
demo.statusPanel.repaint();//相同
}
}
@凌驾
公共无效鼠标事件(鼠标事件e){
//TODO自动生成的方法存根
}
@凌驾
公共无效mouseExited(MouseEvent e){
//TODO自动生成的方法存根
}
@凌驾
公共无效鼠标按下(MouseEvent e){
//TODO自动生成的方法存根
}
@凌驾
公共无效MouseEvent(MouseEvent e){
//TODO自动生成的方法存根
}
}
我在创建w/背景图像的面板和保存创建图像的面板(冗余XD)上尝试了重新绘制,但不幸的是它们都不起作用
还有其他方法访问这些静态变量吗?我实现它们的方法很有效,但我确实认为还有其他更合适或更好的方法,但我不知道。
我希望有人能帮助我,提前感谢,多加力量 在进行任何自定义绘制之前调用
super.paintComponent
,可能是一个好的开始。此外,通常最好覆盖getPreferred/Minimum/MaximumSize
您永远不会根据值controlNumber
绘制任何不同的内容,该值不应直接访问,但应通过setter/getter…1)为了更快地获得更好的帮助,发布(最小完整可验证示例)或(简短、完整、正确的示例)。2)获取图像的一种方法(例如)热链接到.uhm中看到的图像。好啊我真的迷路了。你们说的话我什么也听不懂,伙计们(@MadProgrammer)你能给我举个例子吗?这会帮助我更好地理解XD“伙计们,我从你说的话中什么也得不到?”如果你连问具体的、有针对性的问题都不懂,我怀疑你是否有能力成为一名程序员。
import java.awt.event.*;
public class mouseEvent implements MouseListener {
backGroundClass bgc = new backGroundClass ();
@Override
public void mouseClicked(MouseEvent e) {
if (!MainProg.flag){
demo.message.append(Integer.toString(e.getClickCount()));
}
if (e.getClickCount() > 5) {
bgc.controlNumber = 3;
bgc.panel.repaint(); //this does not work :<
demo.statusPanel.revalidate(); //this also
demo.statusPanel.repaint(); //same
}
}
@Override
public void mouseEntered(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mouseExited(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mousePressed(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mouseReleased(MouseEvent e) {
// TODO Auto-generated method stub
}
}