Heim >Java >javaLernprogramm >Warum wird meine JTextArea nach dem Ändern eines Arrays mit SwingPropertyChangeSupport nicht aktualisiert?
SwingPropertyChangeSupport zur dynamischen Aktualisierung von JTextArea
SwingPropertyChangeSupport ist eine Klasse, die zum Überwachen von Änderungen in den Eigenschaften eines Objekts verwendet werden kann. Dadurch können andere Objekte benachrichtigt werden, wenn sich eine Eigenschaft ändert, was für die entsprechende Aktualisierung der GUI nützlich sein kann.
In diesem Beispiel verwenden wir SwingPropertyChangeSupport, um zu ermöglichen, dass ein in einer JTextArea angezeigtes Array aktualisiert wird, wenn Änderungen vorgenommen werden Die Eingabe erfolgt über einen Eingabedialog. Das Array wird in Ordnung aktualisiert, aber die GUI wird nicht aktualisiert.
Hier ist der geänderte Code:
<code class="java">import java.awt.BorderLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.FocusListener; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.JTextArea; import javax.swing.event.SwingPropertyChangeSupport; public class Main { public static void main(String[] arg) { GuiForUpdate display = new GuiForUpdate(); display.setVisible(true); } } class GuiForUpdate extends JFrame implements ActionListener { /** * */ private static final long serialVersionUID = 1L; private FocusListener focusListener; private String mList; private JButton changeArrayButton; private JTextArea codeIn, displayOutput; private int arrayIndex; private JPanel displayPanel; private ArrayForUpdating arrayForUpdate = new ArrayForUpdating(); public GuiForUpdate() { setSize(224, 180); layoutLeft(); layoutDisplay(); layoutBottom(); } /** * adds a display area for array */ public void layoutDisplay() { displayPanel = new JPanel(); add(displayPanel, BorderLayout.CENTER); displayOutput = new JTextArea(); displayPanel.add(displayOutput); displayOutput.addFocusListener(focusListener); mList = arrayForUpdate.getBoundProperty(); arrayForUpdate.addPropertyChangeListener(new PropertyChangeListener() { @Override public void propertyChange(PropertyChangeEvent pcEvt) { if (pcEvt.getPropertyName().equals( ArrayForUpdating.BOUND_PROPERTY)) { mList = (pcEvt.getNewValue().toString()); updateDisplay(); } } }); displayOutput.setText(mList); } /** * adds left hand side elements to left of GUI */ public void layoutLeft() { JPanel left = new JPanel(); add(left, BorderLayout.WEST); codeIn = new JTextArea(2, 2); left.add(codeIn); codeIn.addFocusListener(focusListener); } /** * adds bottom elements to bottom of GUI */ public void layoutBottom() { JPanel bottom = new JPanel(); changeArrayButton = new JButton("Modify array"); changeArrayButton.addActionListener(this); bottom.add(changeArrayButton); add(bottom, BorderLayout.SOUTH); } /** * Process button clicks */ public void actionPerformed(ActionEvent ae) { if (ae.getSource() == changeArrayButton) { // first check if any code entered if (codeIn.getText().trim().length() != 0) { // call modifyMemory() method modifyArray(); } else JOptionPane.showMessageDialog(null, "Please enter something first."); } } /** * method to process modify array */ public void modifyArray() { // show dialog to retrieve entered address String addressToModify = (String) JOptionPane .showInputDialog("At which location?"); // confirm if a string was entered if ((addressToModify != null) && (addressToModify.length() > 0)) { // convert to integer if decimal address entered arrayIndex = Integer.parseInt(addressToModify); } // pass as integer processInput(arrayIndex); } public void processInput(int a) { String newValue = codeIn.getText(); arrayForUpdate.instructionsIn(newValue, a); } public void updateDisplay() { displayOutput.setText(mList); } } class ArrayForUpdating { public static final String BOUND_PROPERTY = "bound property"; private String boundProperty = ""; private SwingPropertyChangeSupport spcSupport = new SwingPropertyChangeSupport( this); private StringBuilder mList; private int[] myArray; public ArrayForUpdating() { myArray = new int[5]; for (int i = 0; i < myArray.length; i++) { myArray[i] = 0; } setArrayyDisplayString(); } /** * method to create formatted string of array */ public void setArrayyDisplayString() { // create StringBuilder for display in memory tab mList = new StringBuilder();</code>
Das obige ist der detaillierte Inhalt vonWarum wird meine JTextArea nach dem Ändern eines Arrays mit SwingPropertyChangeSupport nicht aktualisiert?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!