gpt4 book ai didi

java - 从面板中删除/清空 gridLayout

转载 作者:行者123 更新时间:2023-12-02 03:40:39 26 4
gpt4 key购买 nike

我有一个 9x9 的网格布局,并生成 Jtextareas 来填充它。如果用户按下按钮,我希望网格布局再次变空,以便我可以再次填充它,但与之前填充的内容无关。是否有某种命令,例如 gridlayout.delete() 或其他命令?

最佳答案

我猜测您想要清除使用 GridLayout 的容器保存的文本组件(您没有告诉我们,请理解这是有关您的问题的关键信息)。如果是这样,请将它们放入一个集合(例如 ArrayList)中,并在循环中调用 setText("") 遍历该列表。

如果您使用的是 Java 8,则此“for 循环”可以替换为 Stream 上的 forEach(...) 调用。例如,如果您有一个像这样的 ArrayList:

List<JTextComponent> textComponentList = new ArrayList<>();

然后您可以通过此调用清除它保存的所有文本组件:

textComponentList.stream().forEach(tc -> tc.setText(""));

例如:

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Font;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.KeyEvent;
import java.util.ArrayList;
import java.util.List;

import javax.swing.*;
import javax.swing.text.JTextComponent;

@SuppressWarnings("serial")
public class ClearGrid extends JPanel {
private static final int ROWS = 9;
private static final int COLS = ROWS;
private static final int GAP = 2;
private static final Font FONT = new Font(Font.SANS_SERIF, Font.BOLD, 32);
private static final int FIELD_COLS = 2;
List<JTextComponent> textComponentList = new ArrayList<>();

public ClearGrid() {
JPanel gridPanel = new JPanel(new GridLayout(ROWS, COLS, GAP, GAP));
gridPanel.setBackground(Color.BLACK);
for (int i = 0; i < ROWS; i++) {
for (int j = 0; j < COLS; j++) {
JTextField textField = new JTextField(FIELD_COLS);
textField.setFont(FONT);
textField.setHorizontalAlignment(JTextField.CENTER);
textComponentList.add(textField);
gridPanel.add(textField);
}
}

JPanel buttonPanel = new JPanel();
buttonPanel.add(new JButton(new ClearAllAction("Clear All", KeyEvent.VK_C)));

setLayout(new BorderLayout());
add(gridPanel);
add(buttonPanel, BorderLayout.PAGE_END);
}

private class ClearAllAction extends AbstractAction {
public ClearAllAction(String name, int mnemonic) {
super(name);
putValue(MNEMONIC_KEY, mnemonic);
}

@Override
public void actionPerformed(ActionEvent e) {
textComponentList.stream().forEach(tc -> tc.setText(""));
}
}

private static void createAndShowGui() {
JFrame frame = new JFrame("ClearGrid");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().add(new ClearGrid());
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}

public static void main(String[] args) {
SwingUtilities.invokeLater(() -> {
createAndShowGui();
});
}
}

关于java - 从面板中删除/清空 gridLayout,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36870444/

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