Giter VIP home page Giter VIP logo

jo-widgets's Introduction

Jowidgets API (Java open widget API)

Main goals

  • Enterprise GUI Application development for java
  • Single Sourcing - write applications only once for different UI platforms

Documentation

Depending projects

Architecture

Architecture

Screenshots

Swing SPI implementation

Swing

SWT SPI implementation

Swt

RWT SPI implementation (AJAX, rendered with IE)

Rwt

Silk icons

Jowidgets uses the Silk Icons library for it's demo applications. If you want to use these icons for your applications too, please respect the licence conditions of Silk Icons.

jo-widgets's People

Contributors

herrgrossmann avatar hwestphal avatar lukasgross avatar nielsbeuck avatar theyellow avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar

jo-widgets's Issues

HertzUnitProvider integrieren

Moved from jo-client-platform jo-source/jo-client-platform#45
Added by A. Bentele

Für die Anzeige von Werten mit Einheit Hertz habe ich folgende Klasse erstellt, die je nach Größe des Werts den Wert als H, kHz, MHz oder GHz anzeigt. Dabei wird berücksichtigt, dass keine Nachkommastellen verloren gehen.

Im Gegensatz dazu stellt der StaticUnitProvider die Werte immer mit der gleichen Einheit dar.

Evtl. diese Klasse in das Framework aufnehmen.

import org.jowidgets.api.convert.IConverter;
import org.jowidgets.api.convert.IConverterProvider;
import org.jowidgets.api.toolkit.Toolkit;
import org.jowidgets.unit.api.IUnit;
import org.jowidgets.unit.api.IUnitConverter;
import org.jowidgets.unit.api.IUnitProvider;
import org.jowidgets.unit.api.IUnitSet;
import org.jowidgets.unit.api.IUnitValue;
import org.jowidgets.unit.tools.converter.LongDoubleUnitConverter;
import org.jowidgets.unit.tools.units.HertzUnitSet;
import org.jowidgets.util.Assert;

public final class HertzUnitProvider implements IUnitProvider {

private final IUnit defaultUnit;

public HertzUnitProvider(final IUnit defaultUnit) {
    Assert.paramNotNull(defaultUnit, "defaultUnit");
    this.defaultUnit = defaultUnit;
}

@Override
public IUnit getUnit(final Long value) {
    if (value != null) {
        final IUnitSet unitSet = HertzUnitSet.instance();
        for (int i = unitSet.size() - 1; i >= 0; i--) {
            final IUnit unit = unitSet.get(i);
            if (validateUnit(value, unit)) {
                return unit;
            }
        }
    }
    return defaultUnit;
}

/**
 * Checks if the value can be displayed using the given unit and Double converter without loss of decimal places.
 *
 * @param value
 * @param unit
 * @return
 */
private boolean validateUnit(final Long value, final IUnit unit) {
    final IUnitConverter<Long, Double> unitConverter = new LongDoubleUnitConverter(unit);
    final IUnitValue<Double> unitValue = unitConverter.toUnitValue(value);

    final IConverterProvider converters = Toolkit.getConverterProvider();
    final IConverter<Double> converter = converters.getConverter(Double.class);
    if (unitValue.getValue().doubleValue() < 0.5
        || !converter.convertToObject(converter.convertToString(unitValue.getValue())).equals(unitValue.getValue())) {
        return false;
    }
    return true;
}

}

Fix maven repo

The source code of the third party modules (groupId "org.eclipse") should be 
provided in a maven-conform way. Example:
swt-carbon-macosx-3.6.2.jar, swt-carbon-macosx-3.6.2.pom, 
swt-carbon-macosx-3.6.2-sources.jar



Original issue reported on code.google.com by [email protected] on 2 May 2011 at 12:54

FrameWrapper not working

This line throws the exception " 
org.jowidgets.tools.powo.WidgetAlreadyInitializedException: Widget is already 
initialized (was already added to a parent)"

SwingToJo.create(new JFrame());

This call results in two new instances of 
org.jowidgets.impl.widgets.basic.FrameImpl, the first FrameImpl creates its own 
window.

Original issue reported on code.google.com by [email protected] on 8 Mar 2011 at 8:25

Customizable defaults support

IBluePrintFactory should have methods:

//sets an new defaults initializer for type, existing will be removed 

setDefaultsInitializer(Class<? extends ISetupBuilder> type, IDefaultInitializer 
initializer)

//adds an defaults initializer for type, exististing initializers will be kept. 
All initializers will be invoked in the order they was added

addDefaultsInitializer(Class<? extends ISetupBuilder> type, IDefaultInitializer 
initializer)

Original issue reported on code.google.com by [email protected] on 23 Nov 2010 at 10:12

IInputContentContainer does not observerve on registered validatables

What steps will reproduce the problem?
1. Implement an IInputContentContainer
2. Register an IValidateable with the register method
3. Change the validation result of the validatable
3. Fire a validation condition changed method on the validatable 
4. The input composites ValidationLabel does not update the validation state

What is the expected output? What do you see instead?

The label changes


Original issue reported on code.google.com by [email protected] on 28 Mar 2013 at 3:52

Verify of double values is to strict

Assuming colon (,) is the decimal separator and dot (.) is the grouping separator:

When editing an IInputField with double converter that has the value 1,8 e.g. and set the cursor to the beginning (|1,8) it is not possible to remove the '1' with help of the DEL key, because the currently used verifying does not allow the value ',8' and so the modification is rejected

Expected:

The verifying for floating piont numbers should be more tollerant, so e.g. ,8 should be allowed and parsed to 0,8. Grouping separator should be allowed at any place for input. They will be ignored for parsing anyway ( e.g. 1.23.24353.35,21342.234 should be valid). The input if non numeric char should be rejected anymore (e.g. 123Horst34) must not be possible to enter. Parse errors should be validated (not verified with blocking key), so e.g. 12,1323,24 will lead to an validation error but is possible to enter into the input field.

ComboBox and ComboBoxSelection rendered in disabled style when readonly

What steps will reproduce the problem?
1. Create a combobox
2. Set it to editable = false
3. The combobox will be disabled
4. The value of the combobox can not be copied to the clippboard

What is the expected output? What do you see instead?

Idea:

Render comboboxes that are not editable with an text field that is not editable




Original issue reported on code.google.com by [email protected] on 16 Mar 2013 at 12:48

Allow to decouple the swt ui thread

The class https://github.com/jo-source/jo-widgets/blob/master/modules/examples/org.jowidgets.examples.swt/src/main/java/org/jowidgets/examples/swt/UiThreadAccessRuntimeExamplePlainSwt.java demonstrates an issue for the current swt implementation. When invoking Display.asyncExec() sometimes the invoking thread (not the ui thread) blocks for more than 200 ms.

There should be an SwtOption where it is possible, to use a decoupled SwtUiThreadAccess that not invokes the Runnables on the Display but on a SingleThreadAccess thread Queue.

IInputContentContainer does not observerve on registered validatables

What steps will reproduce the problem?
1. Implement an IInputContentContainer
2. Register an IValidateable with the register method
3. Change the validation result of the validatable
3. Fire a validation condition changed method on the validatable 
4. The input composites ValidationLabel does not update the validation state

What is the expected output? What do you see instead?

The label changes


Original issue reported on code.google.com by [email protected] on 28 Mar 2013 at 3:52

  • Merged into: #33

NPE after executing query which contains whitespaces

What steps will reproduce the problem?
1. Open search
2. Pass following string " *" - whitespace is required


What is the expected output? What do you see instead?

java.lang.NullPointerException
    at org.jowidgets.cap.service.jpa.impl.query.CriteriaQueryCreator.createContainsAnyPredicate(CriteriaQueryCreator.java:633)
    at org.jowidgets.cap.service.jpa.impl.query.CriteriaQueryCreator.createArithmeticFilterPredicate(CriteriaQueryCreator.java:444)
    at org.jowidgets.cap.service.jpa.impl.query.CriteriaQueryCreator.createArithmeticFilterPredicate(CriteriaQueryCreator.java:301)
    at org.jowidgets.cap.service.jpa.impl.query.CriteriaQueryCreator.createFilterPredicate(CriteriaQueryCreator.java:226)
    at org.jowidgets.cap.service.jpa.impl.query.CriteriaQueryCreator.createBooleanFilterPredicate(CriteriaQueryCreator.java:282)
    at org.jowidgets.cap.service.jpa.impl.query.CriteriaQueryCreator.createFilterPredicate(CriteriaQueryCreator.java:234)
    at org.jowidgets.cap.service.jpa.impl.query.CriteriaQueryCreator.createBooleanFilterPredicate(CriteriaQueryCreator.java:282)
    at org.jowidgets.cap.service.jpa.impl.query.CriteriaQueryCreator.createFilterPredicate(CriteriaQueryCreator.java:234)
    at org.jowidgets.cap.service.jpa.impl.query.CriteriaQueryCreator.createBooleanFilterPredicate(CriteriaQueryCreator.java:282)
    at org.jowidgets.cap.service.jpa.impl.query.CriteriaQueryCreator.createFilterPredicate(CriteriaQueryCreator.java:234)
    at org.jowidgets.cap.service.jpa.impl.query.CriteriaQueryCreator.fillQuery(CriteriaQueryCreator.java:202)
    at org.jowidgets.cap.service.jpa.impl.query.CriteriaQueryCreator.createReadQuery(CriteriaQueryCreator.java:131)
    at org.jowidgets.cap.service.jpa.impl.SyncJpaReaderServiceImpl.read(SyncJpaReaderServiceImpl.java:71)
    at org.jowidgets.cap.service.impl.ReaderServiceAdapter.read(ReaderServiceAdapter.java:61)
    at sun.reflect.GeneratedMethodAccessor74.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)
    at org.jowidgets.cap.service.hibernate.impl.CancelServicesDecoratorProviderImpl$CancelableInvoker.invoke(CancelServicesDecoratorProviderImpl.java:201)
    at org.jowidgets.cap.service.hibernate.impl.CancelServicesDecoratorProviderImpl$CancelableInvoker.access$300(CancelServicesDecoratorProviderImpl.java:139)
    at org.jowidgets.cap.service.hibernate.impl.CancelServicesDecoratorProviderImpl$CancelInvocationHandler.invokeAsyncSignature(CancelServicesDecoratorProviderImpl.java:134)
    at org.jowidgets.cap.common.tools.proxy.AbstractCapServiceInvocationHandler.invoke(AbstractCapServiceInvocationHandler.java:60)
    at com.sun.proxy.$Proxy21.read(Unknown Source)
    at sun.reflect.GeneratedMethodAccessor74.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)
    at org.jowidgets.cap.service.jpa.impl.JpaServicesDecoratorProviderImpl$JpaInvocationHandler.invokeAsyncSignature(JpaServicesDecoratorProviderImpl.java:236)
    at org.jowidgets.cap.common.tools.proxy.AbstractCapServiceInvocationHandler.invoke(AbstractCapServiceInvocationHandler.java:60)
    at com.sun.proxy.$Proxy21.read(Unknown Source)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)
    at org.jowidgets.cap.remoting.server.GenericRemoteMethod.invokeMethodOnService(GenericRemoteMethod.java:172)
    at org.jowidgets.cap.remoting.server.GenericRemoteMethod.invoke(GenericRemoteMethod.java:68)
    at org.jowidgets.cap.remoting.server.GenericRemoteMethod.invoke(GenericRemoteMethod.java:47)
    at org.jowidgets.invocation.service.server.impl.MethodImpl.invoke(MethodImpl.java:104)
    at org.jowidgets.invocation.server.impl.InvocationServerServiceRegistryImpl.onMethodInvocation(InvocationServerServiceRegistryImpl.java:75)
    at org.jowidgets.invocation.server.impl.InvocationServerMessageReceiver.onMessage(InvocationServerMessageReceiver.java:69)
    at org.jowidgets.message.impl.http.server.Connection.doRun(Connection.java:75)
    at org.jowidgets.message.impl.http.server.Connection.doRun(Connection.java:80)
    at org.jowidgets.message.impl.http.server.Connection.doRun(Connection.java:80)
    at org.jowidgets.message.impl.http.server.Connection.access$000(Connection.java:44)
    at org.jowidgets.message.impl.http.server.Connection$1.run(Connection.java:65)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
    at java.lang.Thread.run(Thread.java:744)




What version of the product are you using? On what operating system?

OS: Windows 
<jowidgets.version>0.28.3</jowidgets.version>
<jocap.version>0.25.2</jocap.version>

Please provide any additional information below.


Original issue reported on code.google.com by [email protected] on 5 Sep 2014 at 7:16

Jowidgets vs. Jo-widgets

What the name of you project? Title says jo-widget, first wiki page jowidgets.

I suggest to make it consistent. I know that this is a silly request, but I 
guess consistency is a good thing.




Original issue reported on code.google.com by [email protected] on 9 Oct 2013 at 2:52

Feature Request: layoutEnd(boolean optimise)

In Jo-Widgets gibt es im Interface IContainer die Methoden !layoutBegin() und 
!layoutEnd().

Diese sind für die Implementierung gegen SWT sind diese in !SwtContainer.java 
definiert als:

{{{
public void layoutBegin() {
    composite.setRedraw(false);
}
}}}

und 

{{{
public void layoutEnd() {
    composite.layout(true, true);
    composite.setRedraw(true);
}
}}}


Zweck dieser Operationen ist (nach meinem Verständnis) bei häufigen 
Änderungen von UI Komponenten
ein flackern zu vermeiden (durch das setRedraw(false)). 


Ein Performance-Bottleneck kann bei häufigem Aufruf der Methode layoutEnd() 
der Aufruf von
composite.layout(true, true) darstellen. Laut SWT Dokumentation bedeuten beide 
True Flags,
dass "Brute Force" alles komplett neu layout'ed wird, ohne Optimierung durch 
z.B. gecache'te Informationen: 
{{{
If the changed argument is true the layout must not rely on any information it 
has cached about its children.
If it is false the layout may (potentially) optimize the work it is doing by 
assuming that none of the receiver's
children has changed state since the last layout. If the all argument is true 
the layout will cascade down through
all child widgets in the receiver's widget tree, regardless of whether the 
child has changed size.
}}}
Wird layoutEnd häufig augerufen, kann dies zu einer "Trägheit" der 
betroffenen UI Teile führen.

Daher ist layoutBegin und layoutEnd nur dort zu verwenden, wo man sicher sein 
kann, dass es selten
aufgerufen wird bzw. wo keine negativen Auswirkungen auf die UI Performance zu 
befürchten sind.

Ein Vorschlag für eine API Änderung ist daher, neben der Methode 

{{{
void layoutEnd()
}}}


eine weitere 


{{{
void layoutEnd(boolean optimise)
}}}


einzuführen. Der Flag optimise gibt an ob auf Optimierungen beim layoutEnd 
zurückgegriffen werden kann. 


Original issue reported on code.google.com by [email protected] on 18 Jan 2013 at 9:49

Klicking on Swing TableHeaders empty area leads to ArrayIndexOutOfBoundException

Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: -1
at org.jowidgets.impl.widgets.basic.TableModelSpiAdapter.convertViewToModel(TableModelSpiAdapter.java:253)
at org.jowidgets.impl.widgets.basic.TableColumnObservableSpiAdapter.fireMouseClicked(TableColumnObservableSpiAdapter.java:85)
at org.jowidgets.impl.widgets.basic.TableImpl$3.mouseClicked(TableImpl.java:135)
at org.jowidgets.spi.impl.controller.TableColumnObservable.fireMouseClicked(TableColumnObservable.java:64)
at org.jowidgets.spi.impl.swing.common.widgets.TableImpl$TableColumnListener.mouseClicked(TableImpl.java:891)
at java.awt.AWTEventMulticaster.mouseClicked(AWTEventMulticaster.java:270)
at java.awt.AWTEventMulticaster.mouseClicked(AWTEventMulticaster.java:269)
at java.awt.Component.processMouseEvent(Component.java:6538)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3324)
at java.awt.Component.processEvent(Component.java:6300)
at java.awt.Container.processEvent(Container.java:2236)
at java.awt.Component.dispatchEventImpl(Component.java:4891)
at java.awt.Container.dispatchEventImpl(Container.java:2294)
at java.awt.Component.dispatchEvent(Component.java:4713)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4888)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4534)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4466)
at java.awt.Container.dispatchEventImpl(Container.java:2280)
at java.awt.Window.dispatchEventImpl(Window.java:2750)
at java.awt.Component.dispatchEvent(Component.java:4713)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:758)
at java.awt.EventQueue.access$500(EventQueue.java:97)
at java.awt.EventQueue$3.run(EventQueue.java:709)
at java.awt.EventQueue$3.run(EventQueue.java:703)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:86)
at java.awt.EventQueue$4.run(EventQueue.java:731)
at java.awt.EventQueue$4.run(EventQueue.java:729)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:728)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)

impl of IWidgetUtils does not work correctly

getParent() returns widgets than are neither an IWindowWidgetCommon nor an 
IChildWidget, so implementation returns null in some cases, even if all widgets 
was created with the widget api

Original issue reported on code.google.com by [email protected] on 15 Nov 2010 at 1:54

Make registration of "Dynamic Perspective" configurable

When integrating Jo-Widgets into the application, I would like to be able to 
disable or explicitely enable the registration of the "Dynamic Perspective" to 
the list of available perspectives as this should be an optional feature.

Requirements:
- the registration of the "Dynamic Perspective" is per disabled (per default) 
and must be explicitely enabled (e.g. setting a property) if needed
OR
- there is a mechanism (e.g. setting a property) to disable the registration of 
the "Dynamic Perspective"

Original issue reported on code.google.com by [email protected] on 3 Sep 2014 at 1:18

AccessControlException when closing Swing Webstart demo application

The SwingApplicationRunner calls a restricted method when 
`IApplicationLifecycle#finish` is called. This leads to an exception thrown 
when used in an unsigned webstart application (and the JVM process will not be 
terminated):
{{{
java.security.AccessControlException: access denied 
(java.lang.RuntimePermission accessDeclaredMembers)
    at java.security.AccessControlContext.checkPermission(Unknown Source)
    at java.security.AccessController.checkPermission(Unknown Source)
    at java.lang.SecurityManager.checkPermission(Unknown Source)
    at java.lang.SecurityManager.checkMemberAccess(Unknown Source)
    at java.lang.Class.checkMemberAccess(Unknown Source)
    at java.lang.Class.getDeclaredMethod(Unknown Source)
    at org.jowidgets.impl.swing.application.SwingApplicationRunner$1.finish(SwingApplicationRunner.java:70)
}}}

Original issue reported on code.google.com by [email protected] on 4 Feb 2011 at 7:50

Rounding erros in hz unit converter

Thanks to AB for Bugreport and Testclass

The input of 1.005 GHz leads to a warning Warnung „Frequency: the value can not be converted into the base unit without rounding erros!“
o 1. Bug: Typor: „erros“ => „errors“
o 2. Bug: Special numbers like 1.005 GHz gives the Warnung.

Reason: internernal conversion error because of using double, what shows the class ConversionTest

Solution: Using BigDecimal instead of double

public class ConversionTest {

  private static final int FACTOR_GHZ = 1000000000;

  @Test
  public void testConvert1005GHzDouble() {
        final double value = 1.005; // eingegebener Wert
        final long baseValue = (long) (value * FACTOR_GHZ); // interner Wert
        final double convertedBack = (double) baseValue / FACTOR_GHZ;

        Assert.assertEquals(1005000000, baseValue); // java.lang.AssertionError: expected:<1005000000> but was:<1004999999>
        Assert.assertEquals(value, convertedBack, 0d); //java.lang.AssertionError: expected:<1.005> but was:<1.004999999>
  }

  @Test
  public void testConvert1005GHzBigDecimal() {
        final BigDecimal value = BigDecimal.valueOf(1.005);
        final BigDecimal baseValue = value.multiply(BigDecimal.valueOf(FACTOR_GHZ));
        final BigDecimal convertedBack = baseValue.divide(BigDecimal.valueOf(FACTOR_GHZ));

        Assert.assertEquals(1005000000, baseValue.longValue()); // kein AssertionError!
        Assert.assertEquals(value, convertedBack); // kein AssertionError!
  }

}

Convenience for IContainer

Containers should have the following methods:

List<IControl> getChildren();
boolean removeChild(IControl control);


Original issue reported on code.google.com by [email protected] on 23 Nov 2010 at 9:37

Minimize setup common

Move all possible setups from common module to api module to reduce 
implementation effort of spi.

e.g. getForegroundColor() could be considered from api when creating an widget

Original issue reported on code.google.com by [email protected] on 15 Nov 2010 at 1:46

Default increment of SWT ScrollBar is 1px

When clicking on the arrows of an SWT scrollbar, as used in a ScrolledComposite, it only scrolls by 1px per default. This is an open issue in SWT, see https://bugs.eclipse.org/bugs/show_bug.cgi?id=367208
While it is possible to set the increment size on the ScrollBar directly, there is often no easy way to access it from outside.
However, there is an opportunity to add a workaround for this in
org.jowidgets.spi.impl.swt.common.widgets.ScrollCompositeImpl

ERROR_INFO ValidationMessageType must be added

ERROR_INFO type means Errors, where the user has not done anything wrong 
yet,(e.g hasn't done any input yet), but the input is nevertheless not valid. 

ERROR_INFO's could be rendered in a different color then (e.g. in Validation 
Label), so user will not be discouraged with errors before input already 
started.

After introduced the new type, the ValidationLabelWidget must be adopted for 
that, and MandatoryInfoValidator should use the new type.




Original issue reported on code.google.com by [email protected] on 5 Oct 2010 at 6:37

Resize Listener in JFrame

The resize listener for JFrame is not working properly, because it is called at 
the end of an resize event (and not continously while resizing).

Solution:
The ComponentListener (ComponentAdapter) has to be added to the ContentPane of 
the JFrame. This Listener will only receive resize events, because the 
ContentPane will never be moved relative to the JFrame.

Suggestion:

// in SwingComponent
final Component resizeListenerComponent;  // may be replaced by method
if (getUiReference() instanceof JFrame) {
    resizeListenerComponent = ((JFrame) getUiReference()).getContentPane();
}
else {
    resizeListenerComponent = getUiReference();
}
resizeListenerComponent.addComponentListener(new ComponentAdapter() {
    @Override
    public void componentResized(final ComponentEvent e) {
        componentObservable.fireSizeChanged();
    }
});

getUiReference().addComponentListener(new ComponentAdapter() {

    @Override
    public void componentMoved(final ComponentEvent e) {
        componentObservable.firePositionChanged();
    }
});

Original issue reported on code.google.com by [email protected] on 22 Apr 2011 at 1:29

Move to Git?

Please close if you disagree but could you switch to Git for your project?

Original issue reported on code.google.com by [email protected] on 9 Sep 2013 at 1:14

Missing KeyEvents on SwingTable

KeyEvents from an SwingTable will only be thrown when table cell has the focus.

KeyEvents should also be thrown when header or vieport has the focus.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.