java刷新jtext,java – SwingPropertyChangeSupport动态更新JTextA...

我正在尝试建立有关SwingPropertyChangeSupport的问题的答案

我试图通过非常有用的Hovercraft Full Of Eels的答案修改这里给出的代码:

WindowListener does not work as expected,允许在通过输入对话框输入更改时更新显示的数组.

数组已更新,但未在GUI中刷新.我希望有人能告诉我哪里出错了.

这是代码:

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());

}

}

});

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);

}

}

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();

for (int i = 0; i < myArray.length; i++) {

mList.append(String.format("%10s %02d %10s %02d", "Pos: ", i,

"Value: ", myArray[i]));

mList.append("

");

}

setBoundProperty(mList.toString());

}

/**

* This method takes in a string passed through from the GUI

*/

public void instructionsIn(String codeIn, int loc) {

String code = codeIn.trim();

int oc = Integer.parseInt(code);

// add the data to the array

setArrayData(loc, oc);

loc++;

}

/**

* method to add data to the array

*/

public void setArrayData(int a, int memData) {

myArray[a] = memData;

// print array to console for checking

for (int i = 0; i < myArray.length; i++) {

System.out.println("location: " + i + " value: " + myArray[i]);

}

setArrayyDisplayString();

}

public SwingPropertyChangeSupport getSpcSupport() {

return spcSupport;

}

public void setSpcSupport(SwingPropertyChangeSupport spcSupport) {

this.spcSupport = spcSupport;

}

public String getBoundProperty() {

return boundProperty;

}

public void setBoundProperty(String boundProperty) {

String oldValue = this.boundProperty;

System.out.println("old = " + oldValue);

String newValue = boundProperty;

System.out.println("new = " + newValue);

this.boundProperty = newValue;

spcSupport.firePropertyChange(BOUND_PROPERTY, oldValue, newValue);

}

public void addPropertyChangeListener(PropertyChangeListener listener) {

spcSupport.addPropertyChangeListener(listener);

}

}

-编辑-

希望删除编译错误.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值