Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/357.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java paint仅在窗口(un?)聚焦时更新_Java_Netbeans - Fatal编程技术网

Java paint仅在窗口(un?)聚焦时更新

Java paint仅在窗口(un?)聚焦时更新,java,netbeans,Java,Netbeans,我的Java代码有点问题。对于一个学校项目,我们必须编写一个简单的Java程序。我有一些编程经验,但不懂Java 我们使用的是Netbeans,我们必须制作一个JFrame,其中包含一个包含小程序的面板。小程序应该是一个简单的交通灯(红色/橙色/绿色),JFrame应该包含三个按钮“红色”、“橙色”和“绿色”,它们应该更新交通灯 我让它的大部分工作:我有一个小程序,绘制交通灯的基础上布尔红色,橙色和绿色,和更新使用按钮也工作 问题是,只有当我将窗口隐藏在其他窗口后面,然后使其再次出现时,屏幕才会

我的Java代码有点问题。对于一个学校项目,我们必须编写一个简单的Java程序。我有一些编程经验,但不懂Java

我们使用的是Netbeans,我们必须制作一个JFrame,其中包含一个包含小程序的面板。小程序应该是一个简单的交通灯(红色/橙色/绿色),JFrame应该包含三个按钮“红色”、“橙色”和“绿色”,它们应该更新交通灯

我让它的大部分工作:我有一个小程序,绘制交通灯的基础上布尔红色,橙色和绿色,和更新使用按钮也工作

问题是,只有当我将窗口隐藏在其他窗口后面,然后使其再次出现时,屏幕才会重新绘制。我对Java中绘画的工作原理了解有限,在互联网上也找不到解决这个问题的方法。有人能帮我吗

这是我的密码:

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

尝试重新粉刷面板和/或框架

private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {
    applet.SetDaColor(false, true, false);
    applet.repaint();
}
你应该看看,它讨论了对你来说很重要的方法

因为这是为了学校,我还想指出,你的“显示哪种颜色”逻辑将通过使用大大改进,你不会陷入奇怪的状态,例如groen和rood同时都是真的