昨天我问了一个问题,因为我正在制作一个小型的基本应用程序,可以打开带有文本字段和两个按钮的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 String变量转换为文本字段中的内容并打开第二个jFrame。如果它已经打开,那么它只需要文本。然后,在另一个jFrame上,我写了这个:
if ("0".equals(Taller2.opcion)) {
jPanel1.setBackground(java.awt.Color.GREEN);
}
else {
jPanel1.setBackground(java.awt.Color.BLACK);
}
如果你写了零,这将基本上将jPanel变为绿色。问题是它只会在你第一次按下时才能工作。如果您再写一个号码并再次按下该按钮,它将保持相同的颜色。我尝试使用" while(true)"围绕if-else语句循环,但每当我运行它并按下按钮时,程序就会冻结。我怎么能解决这个问题?我在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设计师制作。
答案 0 :(得分:2)
您的代码存在一些问题,我认为您应该修复它们。
jPanel1.setBackground(
。p = new Panel()
,因此您应该将其移动到内部if循环(或者更好地在构造函数中执行它,并且在“if循环”中仅设置可见性答案 1 :(得分:0)
您想要实现的是处理每一个按键。这是在ActionEventListener中完成的。 有关详细信息,请参阅此问题:JFrame ActionListener
答案 2 :(得分:0)
嘿,我认为这应该有效。在我的测试结果,它工作得很好。我以不同的方式创建了我的面板,但您唯一需要担心的是逻辑。基本上我通过调用构建面板的方法创建第一帧,其中包含按钮和文本字段。然后我们为按下按钮创建ActionListener。现在这是逻辑。
IF帧已经可见 如果将OPEN设置为绿色(新框架中的面板),请检查Value = 0 如果没有设置为黑色。
如果框架未打开,请创建一个!
import java.awt.Color;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;
public class JavaApplication2 extends JFrame {
private JButton btnSubmit;
private JTextField jtf;
private JPanel mainPanel, current, open;
private JFrame frame;
private String value;
public JavaApplication2()
{
super("Panel colors");
mainPanel = new JPanel();
mainPanel.add(configureFirst());
setSize(250,240);
add(mainPanel);
setVisible(true);
setLocationRelativeTo(null);
frame = new JFrame();
open = new JPanel();
btnSubmit.addActionListener((ActionEvent e) -> {
value = jtf.getText();
if(frame.isVisible())
{
if(value.equals("0"))
{
open.setBackground(Color.GREEN);
}
else
{
open.setBackground(Color.BLACK);
}
}
else
{
frame.setSize(200,200);
frame.setVisible(true);
frame.add(open);
if(value.equals("0"))
{
open.setBackground(Color.GREEN);
}
else
{
open.setBackground(Color.BLACK);
}
}
});
}
private JPanel configureFirst()
{
current = new JPanel(new GridLayout(2,1));
jtf = new JTextField(12);
btnSubmit = new JButton("Submit");
current.add(jtf);
current.add(btnSubmit);
return current;
}
public static void main(String[] args)
{
JavaApplication2 jp = new JavaApplication2();
}
}