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
中唯一更新的一个,但是您可能需要添加其他setter调用updateTheme
- 对于样式(而不是正确性):以大写字母开始类
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继承
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);
}
}
<