gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 15:01:28 26 4
gpt4 key购买 nike

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

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

我已经完成了大部分工作:我有一个小程序,可以根据 boolean 值红色、橙色和绿色绘制交通灯,并且使用按钮进行更新也可以。

问题是,只有当我将窗口隐藏在其他窗口后面,然后使其再次出现时,屏幕才会重绘。我对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);
}
}

最佳答案

尝试重新绘制面板和/或框架

private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {
applet.SetDaColor(false, true, false);
applet.repaint();
}

关于Java 绘制仅在窗口(un?)聚焦时更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13583257/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com