我正在尝试从其他类更新JLabel
,但它不起作用。
这是两个类。
第一个是通过调用方法showGUI
加载GUI的主类。 JLabel
在此方法中定义。
此方法还调用第二个类grabScreen
,后者需要更新第一个类中的JLabel
。
public class magnify extends JFrame{
public final void showGUI(){
JLabel IL = new JLabel(new ImageIcon());
panel.add( IL );
IL.setLocation( 0, 0 );
int[] a= { 11, 20 };
grabScreen g= new grabScreen( a );
}
//showGUI ends here
public magnify(){ showGUI(); }
public static void main( String[] args ){
SwingUtilities.invokeLater( new Runnable(){ public void run(){ magnify rm= new magnify(); rm.setVisible(true); } });
}
//main ends here
}
//magnify class ends here
//Second class grabScreen
public class grabScreen implements Runnable{
public grabScreen( int[] a ){
try{
IL.setIcon( new ImageIcon(ImageIO.read( new File( "sm.jpeg" ) ) ) );
// IL is the JLabel in the first class "magnify" inside a method "showGUI"
}catch(Exception e ){ }
}
}
// grabScreen ends here
答案 0 :(得分:0)
IL
似乎是showGUI
方法中定义的局部变量。您可以将其声明为magnify
类中的(公共或私有)字段。在grabScreen
内,您需要能够访问您已创建的magnify
实例(通过将其作为参数传递,或将其分配到grabScreen
中的字段)
例如:
public class magnify extends JFrame{
public JLabel IL; // <-- THE RELEVANT CHANGE
public final void showGUI(){
IL = new JLabel(new ImageIcon());
panel.add( IL );
IL.setLocation( 0, 0 );
int[] a= { 11, 20 };
grabScreen g= new grabScreen( a, this );
}
//showGUI ends here
public magnify(){ showGUI(); }
public static void main( String[] args ){
SwingUtilities.invokeLater( new Runnable(){ public void run(){ magnify rm= new magnify(); rm.setVisible(true); } });
}
//main ends here
}
//magnify class ends here
//Second class grabScreen
public class grabScreen implements Runnable{
public grabScreen( int[] a, magnify myMagnify ){ // <-- CHANGE THIS
try{
myMagnify.IL.setIcon( new ImageIcon(ImageIO.read( new File( "sm.jpeg" ) ) ) );
// IL is the JLabel in the first class "magnify" inside a method "showGUI"
}catch(Exception e ){ }
}
}
// grabScreen ends here
作为样式建议,Java的常规约定规定类应该在CamelCase
中命名(以大写字母开头),变量应以小写字母开头;因此magnify
应命名为Magnify
,grabScreen
应命名为GrabScreen
,IL
应命名为il
(或更具描述性的内容)