- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
为什么我不能在 this
引用上调用 firePropertyChange()
?
[javac] /home/thufir/NetBeansProjects/Legacy/src/legacy/gui/table/SelectTableFollowup.java:41: error: cannot find symbol
[javac] this.firePropertyChange("client", null, i);
[javac] ^
[javac] symbol: method firePropertyChange(String,<null>,int)
[javac] Note: Some input files use unchecked or unsafe operations.
[javac] Note: Recompile with -Xlint:unchecked for details.
[javac] 1 error
[javac] 1 warning
BUILD FAILED
/home/thufir/NetBeansProjects/Legacy/nbproject/build-impl.xml:923: The following error occurred while executing this line:
/home/thufir/NetBeansProjects/Legacy/nbproject/build-impl.xml:263: Compile failed; see the compiler error output for details.
Total time: 4 seconds
thufir@dur:~/NetBeansProjects/Legacy$
这是我的代码:
package legacy.gui.table;
import java.awt.BorderLayout;
import java.util.logging.Logger;
import javax.swing.JPanel;
import legacy.database.Queries;
public class SelectTableFollowup extends JPanel {
private static final Logger log = Logger.getLogger(SelectTableFollowup.class.getName());
private ClientsTable table;
private Followup followup;
private Select Select;
private final Queries queries = new Queries();
public SelectTableFollowup() {
initComponents();
}
private void initComponents() {
table = new ClientsTable();
followup = new Followup();
Select = new Select();
setLayout(new BorderLayout());
add(Select, BorderLayout.NORTH);
add(table, BorderLayout.CENTER);
add(followup, BorderLayout.SOUTH);
followupButton();
query();
cannotFirePropertyChangeOnThisObj();
}
private void cannotFirePropertyChangeOnThisObj() {
table.addPropertyChangeListener(new java.beans.PropertyChangeListener() {
@Override
public void propertyChange(java.beans.PropertyChangeEvent evt) {
if ("client".equals(evt.getPropertyName())) {
String s = evt.getNewValue().toString();
int i = Integer.parseInt(s);
log.info("i is " + i);
this.firePropertyChange("client", null, i);
}
}
});
}
private void followupButton() {
followup.addPropertyChangeListener(new java.beans.PropertyChangeListener() {
@Override
public void propertyChange(java.beans.PropertyChangeEvent evt) {
if ("followup".equals(evt.getPropertyName())) {
try {
int id = table.getId();
queries.send(id);
table.updateModel();
} catch (ArrayIndexOutOfBoundsException obe) {
log.info(obe.toString()); //no big deal
}
}
}
});
}
private void query() {
Select.addPropertyChangeListener(new java.beans.PropertyChangeListener() {
@Override
public void propertyChange(java.beans.PropertyChangeEvent evt) {
if ("select".equals(evt.getPropertyName())) {
log.info(evt.getNewValue().toString());
table.select(evt.getNewValue().toString());
}
}
});
}
}
从 Netbeans 中,我知道很可能为 NetBeans 创建的 JPanel
调用 this.firePropertyChange()
。
上述类与 Netbeans 生成的类有何不同?两者都扩展了相同的基类。
如果我误用了任何术语,请告诉我。
最佳答案
在这种情况下:
table.addPropertyChangeListener(new java.beans.PropertyChangeListener() {
@Override
public void propertyChange(java.beans.PropertyChangeEvent evt) {
...
this.firePropertyChange("client", null, i);
}
}
关键字this
指的是anonymous创建新的 PropertyChangeListener
实例时生成的内部类。这个事实在这里解释:Using the this Keyword
查看此主题:Keyword for the outer class from an anonymous inner class?您应该将此行替换为此行以引用您的面板类:
table.addPropertyChangeListener(new java.beans.PropertyChangeListener() {
@Override
public void propertyChange(java.beans.PropertyChangeEvent evt) {
...
SelectTableFollowup.this.firePropertyChange("client", null, i);
}
}
或者你可以删除this
,编译器会为你解决同样的问题:
table.addPropertyChangeListener(new java.beans.PropertyChangeListener() {
@Override
public void propertyChange(java.beans.PropertyChangeEvent evt) {
...
firePropertyChange("client", null, i);
}
}
鉴于匿名 inner 类没有任何 firePropertyChange()
方法,编译器将查找外部类(或最终层次结构树)并检查是否它有这样的方法,确实如此。
关于java - 无法在 JPanel 引用上调用 "this.firePropertyChange()",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25425085/
我有以下情况: 在类中,我使用 firePropertyChange() 方法启动 PropertyChange 事件,该事件在另一个类中被捕获并处理,如下所示: if (authResponse.g
我在我的项目中使用 RoboBinding。在类 ContactsActivityViewModel 的某个地方,我调用 firePropertyChange('Contacts') 并得到异常: j
我目前正在开发 Android 数据绑定(bind)应用程序。 我正在使用 android“RoboBinding”库来绑定(bind)模型- View 和 View -模型。 我使用了来自 here
我使用 propertychangesupport、propertychange 和 fireproperty 更改编写 java 程序,现在它可以工作,但根本不是这样,当我更改值并打印它时,它可以工
为什么我不能在 this 引用上调用 firePropertyChange()? [javac] /home/thufir/NetBeansProjects/Legacy/src/legacy
我目前正在开发一个项目,其中当模型部分中的某些内容发生更改时,使用 propertyChangeListener 来更新程序的 View 部分。该程序解决给定的数独难题并更新模型以包含解决方案。 我使
对于 MVC 模型类,我的 setter 看起来像: enum BoundProperty {FIELD_NAME, ...} private Type fieldName; public setFi
我正在使用 Java Beans firePropertyChange(String propertyName, Object oldValue, Object newValue)
好吧,我正在研究来自 JCalendar 的 IDateEditor 接口(interface)实现图书馆,我注意到 Component.firePropertyChange(String prope
我是一名优秀的程序员,十分优秀!