import typing

import java
import java.chaquopy
import java.io
import java.lang
import java.util

class IndexedPropertyChangeEvent(PropertyChangeEvent):
    def __init__(self, source: java.lang.Object | int | bool | float | str, propertyName: str | java.lang.String, oldValue: java.lang.Object | int | bool | float | str, newValue: java.lang.Object | int | bool | float | str, index: int | java.jint | java.lang.Integer, /) -> None: ...
    def getIndex(self) -> int: ...

class PropertyChangeEvent(java.util.EventObject):
    def __init__(self, source: java.lang.Object | int | bool | float | str, propertyName: str | java.lang.String, oldValue: java.lang.Object | int | bool | float | str, newValue: java.lang.Object | int | bool | float | str, /) -> None: ...
    def getNewValue(self) -> java.lang.Object: ...
    def getOldValue(self) -> java.lang.Object: ...
    def getPropagationId(self) -> java.lang.Object: ...
    def getPropertyName(self) -> str: ...
    def setPropagationId(self, propagationId: java.lang.Object | int | bool | float | str, /) -> None: ...
    def toString(self) -> str: ...

class PropertyChangeListener(java.util.EventListener):
    def propertyChange(self, arg1: PropertyChangeEvent, /) -> None: ...

class PropertyChangeListenerProxy(PropertyChangeListener, java.util.EventListenerProxy[PropertyChangeListener]):
    def __init__(self, propertyName: str | java.lang.String, listener: PropertyChangeListener, /) -> None: ...
    def getPropertyName(self) -> str: ...
    def propertyChange(self, event: PropertyChangeEvent, /) -> None: ...

class PropertyChangeSupport(java.io.Serializable):
    def __init__(self, sourceBean: java.lang.Object | int | bool | float | str, /) -> None: ...
    @typing.overload
    def addPropertyChangeListener(self, listener: PropertyChangeListener, /) -> None: ...
    @typing.overload
    def addPropertyChangeListener(self, propertyName: str | java.lang.String, listener: PropertyChangeListener, /) -> None: ...
    @typing.overload
    def fireIndexedPropertyChange(self, propertyName: str | java.lang.String, index: int | java.jint | java.lang.Integer, oldValue: int | java.jint | java.lang.Integer, newValue: int | java.jint | java.lang.Integer, /) -> None: ...
    @typing.overload
    def fireIndexedPropertyChange(self, propertyName: str | java.lang.String, index: int | java.jint | java.lang.Integer, oldValue: java.lang.Object | int | bool | float | str, newValue: java.lang.Object | int | bool | float | str, /) -> None: ...
    @typing.overload
    def fireIndexedPropertyChange(self, propertyName: str | java.lang.String, index: int | java.jint | java.lang.Integer, oldValue: bool | java.jboolean | java.lang.Boolean, newValue: bool | java.jboolean | java.lang.Boolean, /) -> None: ...
    @typing.overload
    def firePropertyChange(self, event: PropertyChangeEvent, /) -> None: ...
    @typing.overload
    def firePropertyChange(self, propertyName: str | java.lang.String, oldValue: int | java.jint | java.lang.Integer, newValue: int | java.jint | java.lang.Integer, /) -> None: ...
    @typing.overload
    def firePropertyChange(self, propertyName: str | java.lang.String, oldValue: java.lang.Object | int | bool | float | str, newValue: java.lang.Object | int | bool | float | str, /) -> None: ...
    @typing.overload
    def firePropertyChange(self, propertyName: str | java.lang.String, oldValue: bool | java.jboolean | java.lang.Boolean, newValue: bool | java.jboolean | java.lang.Boolean, /) -> None: ...
    @typing.overload
    def getPropertyChangeListeners(self) -> java.chaquopy.JavaArray[PropertyChangeListener]: ...
    @typing.overload
    def getPropertyChangeListeners(self, propertyName: str | java.lang.String, /) -> java.chaquopy.JavaArray[PropertyChangeListener]: ...
    def hasListeners(self, propertyName: str | java.lang.String, /) -> bool: ...
    @typing.overload
    def removePropertyChangeListener(self, listener: PropertyChangeListener, /) -> None: ...
    @typing.overload
    def removePropertyChangeListener(self, propertyName: str | java.lang.String, listener: PropertyChangeListener, /) -> None: ...
