gpt4 book ai didi

java - 依次设置变量

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

我正在尝试创建一个锁屏界面。我有 4 个字符串变量,称为 L11、L21、L31 和 L41。在我的 LockButton 类中,我尝试使用 ActionListener 设置它们的值。我将第一个 L11 设置为按钮中的文本。通过检查 L11 != null 是否为空,我设置了 L21 等等。相反,输出显示每次按下按钮时都会设置 L11,这不是我想要的。

锁屏类

import java.awt.GridLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class LockScreen
{
static int lockID;

static String L1, L2, L3, L4;


static JFrame frame;
static JPanel panel;
static JButton digits;
static GridLayout grid = new GridLayout(3,4);

public static void main(String [] args)
{
frame = new JFrame("LockScreen");
panel = new JPanel();

for(int lockID = 1; lockID < 10; lockID++)
{
lockButton btn = new lockButton(lockID, L1, L2, L3, L4);
panel.add(btn);
}

panel.setLayout(grid);

frame.add(panel);
frame.setSize(300,600);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
}

LockButton类

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;

public class lockButton extends JButton
{
int lockID1;
String L11, L21, L31, L41;

public lockButton(int lockID, String L1, String L2, String L3, String L4)
{
lockID1 = lockID;

L1 = L11;
L2 = L21;
L3 = L31;
L4 = L41;

setText("" + lockID1);

addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
if(L11 == null)
{
L11 = getText();
}
else
{
L21 = getText();
}

System.out.println("Btn Txt: " + getText());
System.out.println("L1: " + L11 + " L2: " + L21 + " L3: " + L31 + " L4: " + L41);
}
});
}

public void setL1()
{
L11 = getText();
}
}

最佳答案

我认为这些分配方式是错误的:

L1 = L11;
L2 = L21;
L3 = L31;
L4 = L41;

应该是:

L11 = L1;
L21 = L2;
L31 = L3;
L41 = L4;

否则,他们会将字段保留为空,并将(未使用的)参数设置为空。

另外,我不确定您的意图,但我猜测您的字段在名称末尾有一个额外的“1”的原因是这样您可以将它们与参数变量区分开来。你不需要这样做。您可以为它们指定相同的名称,然后使用 this 关键字来引用字段:

this.L1 = L1;

编辑:查看其余代码后,我认为您对引用的工作原理有点困惑。每个按钮都有自己的L11、L21、L31、L41。 LockScreen 类中还有 4 个。总共有 40 个变量,并且所有变量都可以单独设置。它们没有连接。

我建议将 4 个变量分组到一个容器对象中,然后您可以传递对单个共享容器对象的引用,设置其变量并使更改在任何地方都可见。

为此可以使用数组。此外,如果这些是数字,那么它们实际上是整数,而不是字符串。因此,在 LockScreen 类中,您将看到类似以下内容:

int[] codeDigits = new int[4];
java.util.Arrays.fill(codeDigits, -1); // using -1 to mark unset digits

然后在LockButton的构造函数中:

public LockButton(final int digit, final int[] codeDigits) {
setText("" + digit);

addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
for (int i = 0; i < codeDigits.length; i++) {
// set next digit:
if (codeDigits[i] == -1) {
codeDigits[i] = digit;
break;
}
}
System.out.println(java.util.Arrays.toString(codeDigits));
}
});
}

关于java - 依次设置变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20458562/

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