java – 使用复选框在文本区域中包装文本
发布时间:2020-12-15 05:20:18 所属栏目:Java 来源:网络整理
导读:我在Swing中创建了一个用于编辑数据的对话框.它包含一个JTextArea,两个JButton实例(OK Cancel)和一个JCheckBox(Wrap Text).我想要做的是在用户单击复选框时将文本区域中的文本包装起来.我最初使用setLineWrap(true)包装文本. 我使用以下代码: Runnable r1=n
我在Swing中创建了一个用于编辑数据的对话框.它包含一个JTextArea,两个JButton实例(OK& Cancel)和一个JCheckBox(Wrap Text).我想要做的是在用户单击复选框时将文本区域中的文本包装起来.我最初使用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); 问题 问题是,一旦我取消选中复选框,文本就会被解包,但再次检查复选框不会再次包装文本.控制台显示正在调用该线程.如何使复选框工作以设置/取消设置文本区域的自动换行行为? 解决方法
没有理由开始单独的线程.更糟糕的是,您不应该修改非EDT上的Swing组件.请参阅
Concurrency in Swing教程
chkSwing.addItemListener( new ItemListener() { @Override public void itemStateChanged(ItemEvent e) { keyField.setLineWrap( e.getStateChange() == ItemEvent.SELECTED ); } } ); 会做的. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |