Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/378.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 更改另一个类中的变量值_Java_Swing_Jpanel - Fatal编程技术网

Java 更改另一个类中的变量值

Java 更改另一个类中的变量值,java,swing,jpanel,Java,Swing,Jpanel,我想做这样的事 主类 import javax.swing.JFrame; import javax.swing.JPanel; import java.awt.Color; import javax.swing.JButton; public class test { public static JFrame frame; public static JPanel panel; public static JButton settings; public static i

我想做这样的事

主类

import javax.swing.JFrame;
import javax.swing.JPanel;
import java.awt.Color;
import javax.swing.JButton;

public class test 
{

 public static JFrame frame;
 public static JPanel panel;    
 public static JButton settings;
 public static int red = 10;
 public static int green = 100;
 public static int blue  = 10;
 
 public static void main( String[] args )
 {
    
  frame = new JFrame();
  frame.setSize(  100 , 100 );
    
  panel = new JPanel();
  panel.setBackground( new Color( red , green , blue) );
  frame.add(  panel );
  
  settings = new JButton( "settings" );
  panel.add( settings );
  settings.addActionListener( new settingsctionListener() );
  
  frame.setVisible( true );
    
 }

}
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class settingsctionListener implements ActionListener
{

 @Override
 public void actionPerformed( ActionEvent e )
 {

  test.red = 100;
  test.green = 255;
  test.blue = 255;
  
 }

}
另一个类

import javax.swing.JFrame;
import javax.swing.JPanel;
import java.awt.Color;
import javax.swing.JButton;

public class test 
{

 public static JFrame frame;
 public static JPanel panel;    
 public static JButton settings;
 public static int red = 10;
 public static int green = 100;
 public static int blue  = 10;
 
 public static void main( String[] args )
 {
    
  frame = new JFrame();
  frame.setSize(  100 , 100 );
    
  panel = new JPanel();
  panel.setBackground( new Color( red , green , blue) );
  frame.add(  panel );
  
  settings = new JButton( "settings" );
  panel.add( settings );
  settings.addActionListener( new settingsctionListener() );
  
  frame.setVisible( true );
    
 }

}
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class settingsctionListener implements ActionListener
{

 @Override
 public void actionPerformed( ActionEvent e )
 {

  test.red = 100;
  test.green = 255;
  test.blue = 255;
  
 }

}
我不知道怎么做那件事

另一个类应该更改变量值红、绿和蓝,以更改整个主题

有一个方法panel.setBackground(…),但这只会更改面板的颜色。喜欢更改整个主题的变量。

  • 当静态变量
    红色
    绿色
    蓝色
    更新时,面板和其他元素不会自动更新。它们需要使用各自的“set”方法进行单独更新
  • 您需要为其他UI元素添加代码。我只看到
    JPanel
    ,这是
    updateTheme
    中唯一更新的一个,但是您可能需要添加其他setter调用
  • 对于样式(而不是正确性):以大写字母开始类
import javax.swing.JFrame;
导入javax.swing.JPanel;
导入java.awt.Color;
导入javax.swing.JButton;
公共类入口点{
公共静态JFrame;
公共静态JPanel面板;
公共静态按钮设置;
公共静态int red=10;
公共静态int绿色=100;
公共静态int蓝色=10;
公共静态void updatetime(int r、int g、int b){
面板.立根背景(新颜色(r,g,b));
//更新任何其他UI元素(面板等)。
//如果出于某种原因需要,请更新静态变量
红色=红色;
绿色=克;
蓝色=b;
}
公共静态void main(字符串[]args)
{
frame=新的JFrame();
框架。设置尺寸(100100);
panel=新的JPanel();
面板.立根背景(新颜色(红、绿、蓝));
框架。添加(面板);
设置=新的JButton(“设置”);
面板。添加(设置);
settings.addActionListener(新的setingsActionListener());
frame.setVisible(true);
}
}
导入java.awt.event.ActionEvent;
导入java.awt.event.ActionListener;
公共类设置ActionListener实现ActionListener
{
//如果使用ActionListener特性,则不需要重写
已执行的公共无效操作(操作事件e)
{
//调用静态updatetime方法
updateTheme(100255255);
System.out.println(“更新设置”);
}
}

在讨论最终解决方案之前,我们应该先清理一下您的代码。特别是

  • 千万不要使用静态变量(糟糕的风格——它不是面向对象的)
  • 使您的起始类从JFrame继承
在考虑了这一点之后,您有四种方法来实现ActionListener。Swing开发中的一种常见方法是使用匿名类。然后它会像这样:

class SwingTest1扩展了JFrame{
最终JPanel小组;
最终按钮设置;
红色整数=10;
绿色整数=100;
int蓝色=10;
私人SwingTest1(){
panel=新的JPanel();
面板.立根背景(新颜色(红、绿、蓝));
添加(面板);
设置=新的JButton(“设置”);
面板。添加(设置);
//匿名ActionListener类
settings.addActionListener(新ActionListener(){
@凌驾
已执行的公共无效操作(操作事件e){
红色=100;
绿色=255;
蓝色=255;
面板.立根背景(新颜色(红、绿、蓝));
}
});
}
公共静态void main(字符串[]args){
SwingTest1帧=新SwingTest1();
框架。设置尺寸(100100);
frame.setVisible(true);
}
}
或者,您也可以让类实现ActionListener:

类SwingTest2扩展JFrame实现ActionListener{
最终JPanel小组;
最终按钮设置;
红色整数=10;
绿色整数=100;
int蓝色=10;
私人SwingTest2(){
panel=新的JPanel();
面板.立根背景(新颜色(红、绿、蓝));
添加(面板);
设置=新的JButton(“设置”);
面板。添加(设置);
//作为自我参照的ActionListener
settings.addActionListener(这个);
}
@凌驾
已执行的公共无效操作(操作事件e){
这个红色=100;
这个绿色=255;
蓝色=255;
面板.立根背景(新颜色(红、绿、蓝));
}
公共静态void main(字符串[]args){
SwingTest2帧=新SwingTest2();
框架。设置尺寸(100100);
frame.setVisible(true);
}
}
如果确实希望有两个类,请使用对框架的反向引用:

class SwingTest3扩展了JFrame{
最终JPanel小组;
最终按钮设置;
红色整数=10;
绿色整数=100;
int蓝色=10;
私人SwingTest3(){
panel=新的JPanel();
面板.立根背景(新颜色(100,100,10));
添加(面板);
设置=新的JButton(“设置”);
面板。添加(设置);
//带反向引用的ActionListener
addActionListener(新设置Listener(this));
}
公共无效设置颜色(整数红色、整数绿色、整数蓝色){
这个红色=红色;
这个.绿色=绿色;
蓝色=蓝色;
面板.立根背景(新颜色(红、绿、蓝));
}
公共静态void main(字符串[]args){
SwingTest3框架=新SwingTest3();
框架。设置尺寸(100100);
frame.setVisible(true);
}
}
和Listener类:

类设置侦听器实现ActionListener{
最终摆动试验3帧;
公共设置侦听器(旋转测试3帧){
超级();
this.frame=frame;
}
@凌驾
已执行的公共无效操作(操作事件e){
frame.setColor(100255255);
}
}
<