佛山华英学校音乐:高分,一个关于JAVA数组的问题!!
Java 里的任何数组元素都不带有本身的“住址”(下标值),就像我们(一丝不挂的)身上不带有家里的地址。
我觉得解决你这道题最直接的方法是把下标值存放在每一个元素里(设成名字):
存值调用 setName( ),取值调用 getName( )。
示范如下:
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
class C extends JFrame {
public C( ) {
setTitle( "以下的格子都是监听点击事件的 JPanel 数组元素" );
getContentPane( ).setLayout( new FlowLayout( ) );
JPanel[ ] pa = new JPanel[ 30 ];
for( int i = 0; i < pa.length; ++i ) {
JPanel p = new JPanel( );
p.setName( i + "" ); // 存值
p.setBorder( BorderFactory.createEtchedBorder( ) );
p.addMouseListener( new MouseAdapter( ) {
public void mouseClicked( MouseEvent e ) {
JOptionPane.showMessageDialog(
C.this,
"下标值是 " + ( ( JPanel ) e.getSource( ) ).getName( ) ); // 取值
}
} );
getContentPane( ).add( pa[ i ] = p );
}
pack( );
setLocation( 200, 200 );
setDefaultCloseOperation( EXIT_ON_CLOSE );
setVisible( true );
}
public static void main( String[ ] args ) { new C( ); }
}
我的方法: 进行比较 !
public void 事件方法(事件源 e){
Object sourcePanel = e.getSource();
int index = 0;//JPanel数组的下标
for(i=0;i<jPanel.length;i++){
if(sourcePanel == jPanel[i]){index = i;}
}
}
int indexOfJPanel(JPanel[] JPanels, JPanel target){
for (int i=0; i<JPanels.length; i++){
if (JPanels[i] == target){return i;}
}
return -1; // not found
}
idx = indexOfJPanel(yourJPanels[], e.getSource());
很遗憾,无法获取,我曾经尝试过也问过同事,所以可以确定无法获取