0

Java コードに少し問題があります。学校のプロジェクトでは、単純な Java プログラムを作成する必要があります。プログラミングの経験はありますが、Java の経験はありません。

Netbeans を使用しており、アプレットを含むパネルを含む JFrame を作成する必要があります。アプレットは単純な信号機 (赤/オレンジ/緑) で、JFrame には信号機を更新する「赤」、「オレンジ」、「緑」の 3 つのボタンが含まれている必要があります。

私はそれのほとんどを機能させました.赤、オレンジ、緑のブール値に基づいて信号機を描画するアプレットがあり、ボタンを使用した更新も機能します.

問題は、ウィンドウを他のウィンドウの後ろに隠してから再び表示する場合にのみ、画面が再描画されることです。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);
}
}
4

2 に答える 2

1

パネルやフレームを再塗装してみてください

private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {
    applet.SetDaColor(false, true, false);
    applet.repaint();
}
于 2012-11-27T11:40:41.063 に答える
0

Java Swing revalidate() vs repaint()を参照してください。ここでは、重要なメソッドについて説明しています。

これは学校向けであるため、 Java Enumsを使用することで「どの色を表示するか」のロジックが大幅に改善されることも指摘したいと思います。たとえば、 groen と rood が両方とも true であるという奇妙な状態に陥ることはありません。同時に。

于 2012-11-27T11:41:13.893 に答える