gpt4 book ai didi

Java - JTextArea - 放弃焦点后进行修改?

转载 作者:行者123 更新时间:2023-11-30 04:46:32 25 4
gpt4 key购买 nike

这是我的代码的简单版本:

JTextArea textareaA = new JTextArea(...);
JTextArea textareaB = new JTextArea(...);

textareaA.addModificationListener(new Modification Listener()
{
public void modified(Modifiable arg0){
if (textareaA.getValue().contains("\t"))
{
textareaA.setValue(textareaA.getValue().trim());
textareaB.getTextComponent().requestFocusInWindow();
}
}
});

问题是,当我尝试不同的方法来改变 A 的值时,B 永远不会获得焦点。如果我关闭 A 的可聚焦功能,则无法将其重新打开。我需要从 A 中删除选项卡,然后将焦点放在 B 上,允许用户在需要时单击返回 A,然后选项卡就会消失。上面的代码导致焦点停留在 A 中,即使我有 B 请求它。这可能是一个时间问题吗?

谢谢!

最佳答案

据我了解您的问题,您希望用户能够键入“Tab”并切换到下一个文本区域。您还想修剪最后输入的“Tab”。

除了如果您在文本中间键入“Tab”,它不会被删除这一事实之外,下一个代码(基于您自己的代码并对其进行了详细阐述)似乎可以满足您的要求:

import java.awt.BorderLayout;
import java.awt.Color;

import javax.swing.BorderFactory;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextArea;
import javax.swing.SwingUtilities;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;

public class Test {

protected void initUI() {
final JFrame frame = new JFrame();
frame.setTitle("Test dialog synch");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel panel = new JPanel(new BorderLayout());
final JTextArea textareaA = new JTextArea(24, 80);
final JTextArea textareaB = new JTextArea(24, 80);
textareaA.setBorder(BorderFactory.createLineBorder(Color.DARK_GRAY, 1));
textareaB.setBorder(BorderFactory.createLineBorder(Color.DARK_GRAY, 1));
textareaA.getDocument().addDocumentListener(new DocumentListener() {

@Override
public void changedUpdate(DocumentEvent e) {
modified();
}

@Override
public void insertUpdate(DocumentEvent e) {
modified();
}

@Override
public void removeUpdate(DocumentEvent e) {
modified();
}

public void modified() {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
if (textareaA.getText().contains("\t")) {
textareaA.setText(textareaA.getText().trim());
textareaB.requestFocusInWindow();
}
}
});
}
});
panel.add(textareaA, BorderLayout.NORTH);
panel.add(textareaB, BorderLayout.SOUTH);
frame.add(panel);
frame.pack();
frame.setVisible(true);
}

public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {

@Override
public void run() {
new Test().initUI();
}
});
}

}

关于Java - JTextArea - 放弃焦点后进行修改?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10840156/

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