我正在尝试用Java制作一个小桌面游戏,以下是它的一些摘录,只是为了表明我的问题是什么。
我有一个带有JLabel数组的JPanel来可视化电路板。每个Label都有自己的MouseListener。一开始,所有标签都是红色的,如果我点击它们中的任何一个,我希望它们都变成绿色。
我知道可以使用setBackground为每个Label轻松完成,但我希望在Panel级别完成,因为它可能与e.x的简单板连接。整个游戏将会发展的角色,而标签只是可视化。
我不知道,我做错了什么。我想我没想好,但我不知道怎么做。有人可以帮帮我吗?
请不要建议paintComponent覆盖,这只是我绝望的效果,当然不起作用。
主要课程:
import java.awt.EventQueue;
public class Main {
public static void main( String args[] ) {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
new Window();
}
});
}
}
窗口类:
import java.awt.FlowLayout;
import java.awt.Dimension;
import javax.swing.JFrame;
public class Window extends JFrame {
public Window() {
setMinimumSize( new Dimension(500, 600) );
setLocationRelativeTo( null );
setDefaultCloseOperation( EXIT_ON_CLOSE );
setLayout( new FlowLayout() );
PanelBoard b = new PanelBoard();
add( b );
setVisible( true );
}
}
小组类:
import javax.swing.JPanel;
import java.awt.FlowLayout;
import java.awt.Dimension;
import java.awt.Color;
public class PanelBoard extends JPanel {
private Field fields[][] = new Field[6][6];
public PanelBoard() {
setLayout( new FlowLayout( FlowLayout.CENTER, 0, 0) );
setPreferredSize( new Dimension( 60*6, 60*6 ) );
addFields( Color.red );
}
public void addFields( Color c ) {
for( int i=0; i<6; i++)
for( int j=0; j<6; j++ ) {
fields[i][j] = new Field( this, c );
add( fields[i][j] );
}
}
}
田野课程:
import javax.swing.BorderFactory;
import javax.swing.JLabel;
import java.awt.Color;
import java.awt.Dimension;
public class Field extends JLabel {
public Field( PanelBoard pb, Color c) {
setBackground( c );
setBorder( BorderFactory.createLineBorder( Color.black ) );
setOpaque( true );
setPreferredSize( new Dimension( 60, 60 ) );
addMouseListener( new Mouse( pb, this ) );
}
}
MouseListener类:
import java.awt.Color;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import javax.swing.BorderFactory;
public class Mouse implements MouseListener {
PanelBoard pb;
Field f;
public Mouse( PanelBoard pb, Field f ) {
this.pb = pb;
this.f = f;
}
@Override
public void mouseReleased( MouseEvent arg ) {
pb.addFields( Color.green );
pb.revalidate();
pb.repaint();
}
@Override
public void mouseClicked( MouseEvent arg ) {}
@Override
public void mousePressed( MouseEvent arg ) {}
@Override
public void mouseExited( MouseEvent arg ) {}
@Override
public void mouseEntered( MouseEvent arg ) {}
}
答案 0 :(得分:0)
只需将此方法添加到PanelBoard
:
public void modifyFields( Color c ) {
for( int i=0; i<6; i++)
for( int j=0; j<6; j++ ) {
fields[i][j].setBackground(c);
}
}
并修改类mouseReleased
的{{1}}方法,如下所示:
Mouse