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

时间:2015-05-27 07:48:20

标签: java swing background jframe jpanel

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

我怎么能解决这个问题,以便每按一下按钮就会改变背景颜色?我还应该说我做了一个“if-else”,所以你只能打开第二个jFrame,因为我不知道如何让它关闭然后再打开,所以这可能与问题有关。谢谢!

这是Panel中的代码。为了方便起见,我试图在引入零时将其变为绿色,现在它甚至不起作用:

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。

2 个答案:

答案 0 :(得分:1)

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

Event Odd

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);
        }

    }

}

答案 1 :(得分:0)

您确定您的代码是否正确?我最好的猜测(没有你提供你的代码)是你的代码,用于检查数字是否奇数甚至无法正常工作。

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

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

(替换" num"与您要测试的号码。)