2016-05-01 5 views
0

Ich habe dieses einfache Texteditor Programm gemacht, aber kann nicht herausfinden, wie die GUI-Komponente Eigenschaften ändern, während das Programm läuft ist. Angenommen, das ein Teil meines Texteditor Quellcode ist:Wie können die Eigenschaften eines JTextArea durch ein Ereignis aktualisiert werden?

boolean wordwrap = false; 

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

und lassen Sie uns sagen, dass ich eine Ereignisquelle haben (JButton) hinzugefügt als Zuhörer textArea ‚s .setLineWrap(boolean) zu ändern. Einfach so:

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

Aber dieser Code funktioniert nicht !!. Also, was ist der richtige Weg, um eine JAVA GUI-Komponente zu aktualisieren oder zu bearbeiten, während das Programm läuft?

+0

Versuchen Sie 'textArea.revalidate()' anstelle eines Repaint auf dem Rahmen. – markspace

+0

@markspace Nun, danke '.revalidate()' funktioniert gut !!! –

Antwort

1
revalidate and validate() 

wird den Rahmen aktualisieren. Sie müssen repaint() nicht verwenden.

Schluss Methode:

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

Sie können entweder den gesamten Rahmen aktualisieren oder einfach nur die JComponent aktualisieren (anstelle von "Rahmen" .revalidate() Einsatz TextArea-;)

+0

Danke !! Es funktioniert jetzt.. –

0

Gerade FYI, nachdem ich eine Chance, es zu testen, es funktioniert gut ohne die revalidate() oder die repaint(). Ich vermute, dass das Problem irgendwo anders in deinem Code war.

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); 
    } 
} 
Verwandte Themen