gpt4 book ai didi

java - 使用复选框在文本区域包装文本

转载 作者:搜寻专家 更新时间:2023-11-01 04:00:47 25 4
gpt4 key购买 nike

我在 Swing 中创建了一个用于编辑数据的对话框。它包含一个 JTextArea、两个 JButton 实例(OKCancel)和一个 JCheckBox(换行)。我想要做的是在用户单击复选框时将文本区域中的文本换行。我最初使用 setLineWrap(true) 将文本换行。

我正在使用以下代码:

    Runnable r1=new Runnable() {
@Override
public void run() {
System.out.println("True");
keyField.setLineWrap(true);
keyField.requestFocus();
}
};

Runnable r2=new Runnable() {
@Override
public void run() {
System.out.println("FALSE");
keyField.setLineWrap(false);
keyField.repaint();
keyField.requestFocus();
}
};
final Thread t1=new Thread(r1) ;
final Thread t2=new Thread(r2);

final JCheckBox chkSwing = new JCheckBox("Word Wrap",true);

chkSwing.addItemListener(
new ItemListener() {
@Override
public void itemStateChanged(ItemEvent e) {
//To change body of implemented methods use File | Settings | File Templates.
if (e.getStateChange() == ItemEvent.SELECTED) {
t1.start();
} else if (e.getStateChange() != ItemEvent.SELECTED){
t2.start();
}
}
});

panel.add(chkSwing);

问题

问题是,一旦我取消选中该复选框,文本就会展开,但再次选中该复选框不会再次对文本进行换行。控制台显示正在调用线程。如何使复选框用于设置/取消设置文本区域的自动换行行为?

最佳答案

这是工作代码。 (有一个可爱的动画屏幕截图,上面有一条评论,强调了几个答案没有指出的东西。)

TextAreaWrapChooser

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.io.*;

class TextAreaWrapChooser {

private JTextArea text = new JTextArea(8,30);

TextAreaWrapChooser() {
final JScrollPane scroll = new JScrollPane(text);

JToolBar tb = new JToolBar();

JCheckBox wrap = new JCheckBox("Line wrap", false);
tb.add(wrap);
wrap.addItemListener(new ItemListener() {
// this method is called on the EDT
public void itemStateChanged(ItemEvent ie) {
boolean doWrap = ie.getStateChange() == ItemEvent.SELECTED;
System.out.println("Wrap text: " + doWrap);
text.setLineWrap( doWrap );
}
});

// fill the text area
try {
File f = new File("TextAreaWrapChooser.java");
FileReader fr = new FileReader(f);
text.read( fr, f );
} catch(Exception weTried) {
}

JPanel gui = new JPanel(new BorderLayout(2,2));
gui.add(tb, BorderLayout.NORTH);
gui.add(scroll, BorderLayout.CENTER);

JOptionPane.showMessageDialog(null, gui);
}

public static void main(String[] args) {
// construct/start the GUI on the EDT.
SwingUtilities.invokeLater(new Runnable() {
public void run() {
new TextAreaWrapChooser();
}
});
}
}

关于java - 使用复选框在文本区域包装文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10311727/

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