【发布时间】:2015-05-28 13:36:01
【问题描述】:
昨天我问了一个问题,因为我正在制作一个小的基本应用程序,它将打开一个带有文本字段和两个按钮的 jFrame。如果你写了一些东西然后点击了按钮,另一个 jFrame 会出现,里面有一个 jPanel,如果你写了一个零,它会变成绿色,或者黑色的任何其他结果。我不知道如何使它工作。我终于让它正常工作了,但它只是第一次。问题是,当你按下按钮时会发生这种情况:
Taller2.opcion = jTextField2.getText();
Panel p;
p = new Panel();
if (Taller2.panelabierto == false) {
p.setVisible(true);
Taller2.panelabierto = true;
}
else {
// No hacer nada
}
它将 Taller2.opcion 字符串变量转换为文本字段中写入的内容并打开第二个 jFrame。如果它已经打开,那么它将只接收文本。然后,在另一个 jFrame 上,我写了这个:
if ("0".equals(Taller2.opcion)) {
jPanel1.setBackground(java.awt.Color.GREEN);
}
else {
jPanel1.setBackground(java.awt.Color.BLACK);
}
如果你写了一个零,这基本上会使 jPanel 变成绿色。问题是它只会在你第一次按下它时起作用。如果您写下另一个数字并再次按下按钮,它将保持相同的颜色。我尝试在 if-else 语句周围使用“while (true)”循环,但每当我运行它并按下按钮时,程序就会冻结。我该如何解决这个问题?我在 Java 方面还很新,所以我很欣赏相当简单的答案。我用 Netbeans 设计器制作了两个 jFrame,所以我并不真正了解它们背后的代码,只知道我添加的用于更改颜色和按钮的代码。谢谢!
编辑:这是我唯一没有添加的代码部分,即主类:
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;
其余部分由 Netbeans 设计器生成。
【问题讨论】:
-
"我尝试使用 "while (true)" 循环" >> 在你的 while(true) 循环中添加以下内容:try{Thread.sleep(100);}catch(InterruptedException e){ };基本上在每个循环中暂停 100 毫秒。
-
冻结问题可能来自于您的 while 占用了所有线程操作。您是否尝试过调试以查看是否再次输入了操作代码(单击按钮后)?我们可能需要更多关于如何处理按钮事件的代码
-
@AlanHay 我刚刚尝试添加该 try-catch 并没有任何区别。当我按下按钮时仍然崩溃。
-
就像你以前的 advised yesterday 一样,发布一个 MCVE。不是不可编译的代码 sn-ps,肯定不是指向“我的代码压缩包”的链接。哦,你为什么还在使用多帧?
-
什么崩溃?没有按预期行事并不是崩溃。不清楚你在问什么。
标签: java swing while-loop jframe jpanel