我刚开始使用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。
答案 0 :(得分:1)
不要创建更多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);
}
}
}
答案 1 :(得分:0)
您确定您的代码是否正确?我最好的猜测(没有你提供你的代码)是你的代码,用于检查数字是否奇数甚至无法正常工作。
确定数字是奇数还是偶数在Java中的最佳方法是使用模数(%
)运算符:
if ((num%2)==0) {
// Number is even
} else {
// Number is odd
}
(替换" num"与您要测试的号码。)