我想要实现在五个面板中都显示一个textfield而且其中的数字要通过button来改变而且数据都要同步我要如何实现,其具体代码怎么写
时间: 2024-02-26 07:56:36 浏览: 28
好的,以下是一个实现您要求的例子:
```java
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;
public class MainFrame extends JFrame {
private static final long serialVersionUID = 1L;
private JTextField[] textFields = new JTextField[5];
private int[] data = new int[5];
public MainFrame() {
super("Multiple TextFields Example");
// 创建面板
JPanel panel = new JPanel(new FlowLayout());
// 创建五个文本字段并添加到面板中
for (int i = 0; i < 5; i++) {
textFields[i] = new JTextField(5);
panel.add(textFields[i]);
}
// 创建五个按钮并添加到面板中
for (int i = 0; i < 5; i++) {
JButton button = new JButton("Button " + (i + 1));
final int index = i;
button.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
data[index]++;
}
});
panel.add(button);
}
// 将面板添加到窗体中
getContentPane().add(panel);
// 创建一个定时器,每隔一段时间更新文本字段的值
new javax.swing.Timer(100, new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
for (int i = 0; i < 5; i++) {
String text = Integer.toString(data[i]);
if (!textFields[i].getText().equals(text)) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
textFields[index].setText(text);
}
});
}
}
}
}).start();
// 设置窗体大小和关闭操作
setSize(new Dimension(500, 100));
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLocationRelativeTo(null);
setVisible(true);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
new MainFrame();
}
});
}
}
```
在这个例子中,我们创建了一个包含五个文本字段和五个按钮的面板,然后通过定时器每隔一段时间更新文本字段的值。每个按钮对应着数据模型中的一个元素,当按钮被点击时,相应元素的值加1。在更新文本字段的值时,我们使用了 invokeLater() 方法将更新操作添加到事件调度线程中,以避免多线程并发问题。