Java 按下按钮时更新jPanel背景色

Java 按下按钮时更新jPanel背景色,java,swing,background,jframe,jpanel,Java,Swing,Background,Jframe,Jpanel,我刚从Java开始,我想做一个小程序,打开一个带有文本字段的jFrame,你可以在其中写一个数字。然后按下一个按钮和另一个带有jPanel的jFrame,如果数字是偶数,它将变为绿色,如果是奇数,它将变为黑色。我编辑了jPanel的代码,使颜色根据数字而变化,但问题是它只能工作一次。如果我写下“2”并按下按钮,jFrame将显示一个绿色面板,但是如果我写下另一个奇数并再次按下,框架将保持绿色 我如何解决这个问题,使背景颜色在我按下按钮时发生变化?我还应该说,我做了一个“if else”,所以你只

我刚从Java开始,我想做一个小程序,打开一个带有文本字段的jFrame,你可以在其中写一个数字。然后按下一个按钮和另一个带有jPanel的jFrame,如果数字是偶数,它将变为绿色,如果是奇数,它将变为黑色。我编辑了jPanel的代码,使颜色根据数字而变化,但问题是它只能工作一次。如果我写下“2”并按下按钮,jFrame将显示一个绿色面板,但是如果我写下另一个奇数并再次按下,框架将保持绿色

我如何解决这个问题,使背景颜色在我按下按钮时发生变化?我还应该说,我做了一个“if else”,所以你只能打开第二个jFrame一次,因为我不知道如何关闭它,然后再打开,所以这可能与问题有关。谢谢

这是面板中的代码。为了让它更简单,如果引入零,我尝试将其变为绿色,但现在它甚至不起作用:

jPanel1 = new javax.swing.JPanel();
if ("0".equals(Taller2.opcion)) {
jPanel1.setBackground(new java.awt.Color(0, 255, 0));
}
else {
jPanel1.setBackground(new java.awt.Color(0, 0, 0));
}
jPanel1.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(255, 255, 255)));

// Code of sub-components - not shown here

// Layout setup code - not shown here

// Code adding the component to the parent container - not shown here
下面是非常基本的主类:

public class Taller2 {

/**
 * @param args the command line arguments
 */
public static String opcion;
public static boolean panelabierto;
public static void main(String[] args) {
    Pregunta a = new Pregunta();
    a.setVisible(true);
    opcion = null;
    panelabierto = false;
    }
}

第二个jFrame(其中包含jPanel)只有由设计器上的Netbeans生成的基本代码。如果您需要带有文本字段的jFrame代码,我也可以添加它,不过我相信问题出在jPanel中。

您确定您的代码正确吗?我的最佳猜测(没有提供代码)是,用于检查数字是奇数还是偶数的代码无法正常工作

在Java中,确定数字是奇数还是偶数的最佳方法是使用模数(
%
)运算符:

if ((num%2)==0) {
// Number is even
} else {
// Number is odd
}

(将“num”替换为要测试的数字。)

不要创建更多的
JPanel
实例,只需创建一个并更改其状态即可

import java.awt.Color;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.GridBagLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.text.NumberFormat;
import javax.swing.JFormattedTextField;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;

public class Test {

    public static void main(String[] args) {
        new Test();
    }

    public Test() {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                try {
                    UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
                } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
                    ex.printStackTrace();
                }

                JFrame frame = new JFrame("Testing");
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                frame.add(new TestPane());
                frame.pack();
                frame.setLocationRelativeTo(null);
                frame.setVisible(true);
            }
        });
    }

    public class TestPane extends JPanel {

        public TestPane() {
            JFormattedTextField field = new JFormattedTextField(NumberFormat.getInstance());
            field.setColumns(4);

            setLayout(new GridBagLayout());

            add(field);

            field.addActionListener(new ActionListener() {
                @Override
                public void actionPerformed(ActionEvent e) {
                    long value = (Long)field.getValue();
                    if ((value % 2) == 0) {
                        setBackground(Color.GREEN);
                    } else {
                        setBackground(Color.RED);
                    }
                }
            });

            setBackground(Color.BLACK);
        }

        @Override
        public Dimension getPreferredSize() {
            return new Dimension(200, 200);
        }

    }

}


通过编码,你尝试了什么?显示您的代码。通过使用
setBackground
并传递
java.awt.color
@MadProgrammer,您可以更改大多数组件的背景色。感谢您提供这些资源链接。它们非常有用。为了更快地获得更好的帮助,请发布一个(最小完整可验证示例)或(简短、独立、正确的示例)。是的,我已经检查了几次,我相信它是正确的。我以前做了一些应用程序来检查一个数字是偶数还是奇数,它们都是正确的,所以我不认为这是问题。@ MightyGreenPanda,你应该把你的代码添加到这个问题上。这不是一个代码转储,而是您正在做的一个示例,它突出了您所遇到的问题。这将减少混乱和更好的响应。我认为如果您看到实际的代码会更好。正如我所说,我用的是设计师,所以我真的不知道问题出在哪里。