我已经制作了这个简单的文本编辑器程序,但是在程序运行时无法弄清楚如何更改GUI组件的属性。 假设这是我的文本编辑器源代码的一部分:
boolean wordwrap = false;
void mainFrame() {
frame = new JFrame("Text Editor");
textArea = new JTextArea(50,20);
textArea.setLineWrap(wordwrap);
让我说我有一个事件源(JButton
)被添加为Listener来改变
textArea
的{{1}}。就像这样:
.setLineWrap(boolean)
但是这段代码不起作用!!那么,在程序运行时更新或编辑JAVA GUI组件的正确方法是什么?
答案 0 :(得分: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();)
答案 1 :(得分:0)
仅供参考,在我有机会测试之后,没有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 );
}
}