我的Java代码有点问题。对于学校项目,我们必须编写一个简单的Java程序。我有一些编程经验,但没有Java。
我们正在使用Netbeans,我们必须制作一个JFrame,其中包含一个包含applet的面板。 applet应该是一个简单的红绿灯(红色/橙色/绿色),JFrame应该包含三个按钮“Red”,“Orange”和“Green”,它们应该更新红绿灯。
我的大部分工作都在运行:我有一个小程序根据布尔红色,橙色和绿色绘制红绿灯,使用按钮进行更新也有效。
问题是当我将窗口隐藏在其他窗口后面时,屏幕只会重绘,然后再次显示。我对Java的绘画工作方式的理解非常有限,我无法在互联网上找到任何解决这个问题的方法。任何人都可以帮助我吗?
这是我的代码:
DeFrame.java
package my.AppletInPanel;
public class DeFrame extends javax.swing.JFrame {
private DeApplet applet;
/** Creates new form DeFrame */
public DeFrame() {
initComponents();
applet = new DeApplet();
jPanel1.add(applet);
}
/** This method is called from within the constructor to
* initialize the form.
* WARNING: Do NOT modify this code. The content of this method is
* always regenerated by the Form Editor.
*/
@SuppressWarnings("unchecked")
// [Generated code]
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
applet.SetDaColor(true, false, false);
}
private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {
applet.SetDaColor(false, true, false);
}
private void jButton3ActionPerformed(java.awt.event.ActionEvent evt) {
applet.SetDaColor(false, false, true);
}
/**
* @param args the command line arguments
*/
public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new DeFrame().setVisible(true);
}
});
}
// Variables declaration - do not modify
private javax.swing.JButton jButton1;
private javax.swing.JButton jButton2;
private javax.swing.JButton jButton3;
private javax.swing.JPanel jPanel1;
// End of variables declaration
}
和DeApplet.java:
package my.AppletInPanel;
import java.applet.Applet;
import java.awt.*;
public class DeApplet extends Applet {
public boolean rood = true, oranje = false, groen = false;
public DeApplet(){
setLayout(null);
setSize(50, 150);
}
public void SetDaColor(boolean r, boolean o, boolean g){
rood = r;
oranje = o;
groen = g;
}
public void paint(Graphics g){
super.paint(g);
g.setColor(Color.white);
g.drawRect(0, 0, 50, 150);
g.fillRect(0, 0, 50, 150);
if(rood){
g.setColor(Color.red);
g.fillOval(0 , 0, 50 ,50);
}
if (oranje){
g.setColor(Color.orange);
g.fillOval(0 , 50, 50 ,50);
}
if (groen){
g.setColor(Color.green);
g.fillOval(0 , 100, 50 ,50);
}
String s1 = (new Boolean(rood).toString());
String s2 = (new Boolean(oranje).toString());
String s3 = (new Boolean(groen).toString());
g.setColor(Color.black);
g.drawString(s1, 25, 25);
g.drawString(s2, 25, 75);
g.drawString(s3, 25, 125);
}
}
答案 0 :(得分:1)
尝试重新绘制面板和/或框架
private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {
applet.SetDaColor(false, true, false);
applet.repaint();
}
答案 1 :(得分:0)
您应该查看Java Swing revalidate() vs repaint(),其中讨论了对您重要的方法。
由于这是针对学校的,我还想指出,使用Java Enums可以大大改善你的“显示哪种颜色”的逻辑,在这种情况下,你无法在奇怪的状态下结束。 groen和rood在同一时间都是真的。