事件如何更新 JTextArea 的属性?

Posted

技术标签:

【中文标题】事件如何更新 JTextArea 的属性?【英文标题】:How can a JTextArea's properties be updated by an event? 【发布时间】:2016-08-26 10:19:06 【问题描述】:

我制作了这个简单的文本编辑器程序,但不知道如何在程序运行时更改 GUI 组件的属性。 假设这是我的文本编辑器源代码的一部分:

boolean wordwrap = false;

void mainFrame() 
  frame = new JFrame("Text Editor");
  textArea = new JTextArea(50,20);
  textArea.setLineWrap(wordwrap);

假设我添加了一个事件源(JButton)作为监听器进行更改 textArea.setLineWrap(boolean)。就像这样:

public void actionPerformed(ActionEvent event) 
  if(wordwrap) wordwrap = false;
  else wordwrap = true;
  textArea.setLineWrap(wordwrap);
  frame.repaint();

但是这段代码不起作用!!。那么,在程序运行时更新或编辑 JAVA GUI 组件的正确方法是什么?

【问题讨论】:

尝试textArea.revalidate(),而不是在框架上重绘。 @markspace 好吧,谢谢.revalidate() 工作正常!!! 【参考方案1】:
revalidate and validate() 

将更新框架。 你不需要使用 repaint()。

最终方法:

public void actionPerformed(ActionEvent event) 
  if(wordwrap) wordwrap = false;
  else wordwrap = true;
  textArea.setLineWrap(wordwrap);
  frame.revalidate(); //is preferable but validate() also works.

您可以更新整个框架或只更新 jComponent(插入 TextArea 而不是“frame”.revalidate();)

【讨论】:

【参考方案2】:

仅供参考,在我有机会对其进行测试后,没有revalidate()repaint() 也可以正常工作。我怀疑问题出在您的代码中的其他地方。

public class TestTextArea

   private final static String testLine = 
           "This is some rather long line that I came up with for testing a textArea.";

   public static void main(String[] args) 
      SwingUtilities.invokeLater( new Runnable() 
         public void run()
         
            gui();
         
       );
   

   private static void gui()
   
      JFrame frame = new JFrame();

      final JTextArea textArea = new JTextArea();
      JPanel span = new JPanel();
      JButton toggle = new JButton( "Switch line wrap" );
      toggle.addActionListener( new ActionListener()
      
         @Override
         public void actionPerformed( ActionEvent e )
         
            textArea.setLineWrap( !textArea.getLineWrap() );
         
       );

      for( int i = 0; i < 10; i++ )
         textArea.append( testLine + testLine + "\n" );
      span.add( toggle );
      frame.add( span, BorderLayout.SOUTH );
      frame.add( textArea );

      frame.pack();
      frame.setSize( 500, 500 );
      frame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
      frame.setLocationRelativeTo( null );
      frame.setVisible( true );
   

【讨论】:

以上是关于事件如何更新 JTextArea 的属性?的主要内容,如果未能解决你的问题,请参考以下文章

求java的JTextField类和JTextArea类的所有方法。

Swing PropertyChangeSupport 动态更新 JTextArea

JTextArea 中的 Java Swing 更新字符串

java中 JTextArea类的属性和方法是啥

如何在漫长的过程中让 JScrollPane 更新

java中 JTextArea类的属性和方法是啥