Detect JSlider value changes?

I am trying to detect updates to the value of a JSlider component so that I can update other GUI components. I added a ChangeListener, but noticed during a debug that the stateChanged method was getting called more often than I anticipated. This was getting called everytime a call to setMinimum() or setMaximum() was made. I would like for this method to be called only when the current value is changed, such as in result of the user moving the knob, a call to setValue is made, or a call to setMinimum() or setMaximum() results in a new value being set. Short of adding a variables to my listeners to detect real value change events, which is not too appealing, I am not sure how this can be done. I noticed in the docs after reading the "How to Use Sliders" tutorial that you can use the ChangeEvent object to get the source slider and call getValueIsAdjusting(), but the method is actually not what it's name indicates:
<<<<<<<<< java documentation
public boolean getValueIsAdjusting()
True if the slider knob is being dragged.
<<<<<<<<<
So this only returns true if this was a user generated event. The method should really be called getKnobIsDragged() or something. Programmatic value changes such as calls to setValue() yield a return of false for this method.
Anyways, it would seem like getting notified only of value changes, either by the user or programmatically, would be a very common need by many applications. What is the recommended way to do this?

Basically, the user needs to be able to select 2 different values. Each of these 2 values is represented by a JSlider control. However, the second value is restricted to be greater than or equal to the first value. So when the value of the first slider, the minimum value of the second slider must be changed to this new value. Similarly, value changes in the second slider must result in the maximum value of the first slider being adjusted.
Normally, changing the min/max DOES NOT change the value if the value is within the range of the new min/max. In this case, I would not want to process the event because the current value stayed the same. However, if the new minimum is greater than the current value or the new maximum is less than the current value, the current value must be updated to reflect the new restrictions. In this case I WOULD want to process this event. So it is not simply a matter of not processing events that stemmed from calls to change the min/max.
I guess there are 2 possibilities to get the behavior I require. First, I can make sure that the code does not break for some reason if a state change occurs that does not result in a new current value. This will result in more processing than is needed, and I will need to use flags to be sure that I do not create an endless cycle of state changes between the two sliders. Or secondly, I can store the last known current value in the listener and simply not process events if the current value is equal to this last known value.
I think the second solution is better since it results in better performance. I still think that this functionality should be provided automatically in the Swing library in some way. Most applications are interested in value changes and not min/max changes.

Similar Messages

  • Event structure to detect value change of a control within a cluster in an array

    I have 1D array that contains a cluster. The cluster contains a numeric and a boolean control.
    If the user starts to edit the numeric control value i would like to call one subVI, and if the boolean control value is changed, call a different subVI.
    The array control on the front panel allows the user to edit a number of the array elements. 
    I would like to use an event structure to detect a value change in the cluster. When editing the Events, in the Event Sources panel i get the option to select only the array, not the cluster within the array or the controls within the cluster. Can the Event structure be opened up to show controls within clusters and arrays?
    The solution i am using is to detect a mouse up event on the array and then use property nodes to  determine if the key focus is on the numeric, and  a case structure to determine which subVI to call. This works, but is there a better (simpler) way?
    Thanks, Blue.

    Thanks for the responses guys.
    The tricky bit was that i wanted the numeric control values to flag they were going to be edited, so i could call a subVI, before their values were changed by the user. This is done by using the key focus property node, - i need to detect changes on the fly rather than post the event.  Probably didn't make this clear enough in my original post. 
    The array is of variable size depending on if the user decides to insert or delete elements. The user also has the option to click and edit the array without having to do to much scrolling through the array index, as the FP shows several elements at a time. The Event Structure does a good job of automatically determining which element in the array is being edited, and returning those values to the property nodes. Turned out simpler than i thought it might be at one point!
    Cheers, Blue. 
    Message Edited by BlueTwo on 01-15-2009 06:52 AM
    Attachments:
    evstrct1.jpg ‏63 KB

  • Event Structure's value change, not detecting changes when tabbing thru array of clusters

    Hi!  I have an array of clusters (int, int, string, int) control, and want to detecting changes made to the it.  I used the Event Structure's value change case on the array, it works excellent except that it'll only detect the changes when you click out of the element or press the enter key (the one by the numbers, not carriage return).  I want it to detect the changes when I tab thru the cluster or array too, but I can't figure it out... Does anyone have any ideas?
    Thanks!

    mfitzsimons wrote:
    altenbach
    Tried Value Change with my example done in 7.1 and it doesn't trgger an event.  That is why I suggested Mouse Down.
    Curious. I did a few minor edits in 8.0 before saving as 7.1, but the simple value change event got triggered just fine when the value vas terminated with a tab in 7.1. Every time.  Strange....
    Are you on 7.1 or 7.1.1? Maybe there's a difference (I am using 7.1.1).
    LabVIEW Champion . Do more with less code and in less time .

  • Detect deleted or changed members

    Hi,
    I am processing time dimension. while processing it is not moving forward from "Detect Deleted or changed members" step.
    Usually it takes about 2-3 mts or some times 5 mts, It is hanging about hour and half and never moves forward.
    can any one help me ?

    Hi,
    To see the IMG changes proceed as follows;
    Position Cursor on the IMG node and click on "Change Log" button (F7). If table loggin is not enabled then you may not be able to see the changes already made. But to track future changes in IMG settings you may Activate Table Logging at the Client Lebel. This can be helped by Basis Team. To check
    For changes made using KP97 you will be able to see changes in the planning screen. Go to KP06 or KP26 or KP46 and select the values and press overview button. Then position cursor on the value that you think has got changed and click Line Items (CTRL + SHIFT + F3) you will see the changes.
    For changes to FI Master data there are different TCodes;
    FS04 - Display changes to GL master centrally etc.
    The user id will be available in the change log.
    Thanks,

  • Value change option for cropping grid lines, PLEASE

    The light grey grid lines that appear during the cropping of photos are perfect on a dark photo, but they are REALLY difficult to see on a very light photo.
    I'm not asking to change colors; just one value change option would suffice.

    For Version 3.0 they could probably auto detect the over brightness and switch between a light and a dark. But I wouldn't hold my breath for anytime soon. A toggle for dark or light overlay would do!
    Don
    Don Ricklin, MacBook 1.83Ghz Duo 2 Core running 10.4.9 & Win XP, Pentax *ist D
    http://donricklin.blogspot.com/

  • LV7: how to catch 'Value change' event for cursor position in XY graph?

    I try to catch an event when the cursor position of a graph's cursor
    changes. I created a reference for the cursor array and registered a dynamic
    event 'Value change' for it. The event does not fire when the cursor changes
    (either by dragging it with the mouse or by direct entry of a new value in
    the cursor's X or Y fields. In contrast, when I register e.g. the 'Mouse Up'
    event for the cursor array, the event IS detected.
    -Franz

    So this is the same behaviour as that of a regular control which also does
    not fire a 'Value changed' event when it gets updated by e.g. writing to a
    local.
    At least the cursor's behavior is consistent then...
    But unfortunately also the direct user interaction with the cursor's numeric
    field does not fire the event, which is NOT consistent.
    I was trying to catch cursor changes in my event loop and had used a 'Mouse
    Up' event of the graph indicator to look for cursor changes (whose last
    position I had kept in a local or shift reg). In order not to miss a direct
    user interaction in the numeric field I added the dynamic event 'Value
    change' to the same event case, but with no success, it missed the direct
    entry ...
    according to what you say this seems to b
    e a bug then...
    -Franz
    "Greg McKaskle" schrieb im Newsbeitrag
    news:[email protected]..
    > > I try to catch an event when the cursor position of a graph's cursor
    > > changes. I created a reference for the cursor array and registered a
    dynamic
    > > event 'Value change' for it. The event does not fire when the cursor
    changes
    > > (either by dragging it with the mouse or by direct entry of a new value
    in
    > > the cursor's X or Y fields. In contrast, when I register e.g. the 'Mouse
    Up'
    > > event for the cursor array, the event IS detected.
    > >
    >
    > The reason is that value change events fire when user action directly on
    > the control changes its value. They do not fire when other programmatic
    > value changes occur. If you are looking at a value change on the cursor
    > palette, user interaction with the numeric should fire it, but updates
    > due to cursor movement are more like programmatic updates.
    >
    > Additional events will likely be added in future
    releases, and these may
    > make it easier to catch cursor movement events on a graph.
    >
    > Greg McKaskle
    >

  • [LV2013] Events ordering (mouse down vs. value changed) ?

    Hi,
    I've encountered a problem with my real-time behaving UI.
    The event distribution mechanism registers several events
    linked to various UI controls.
    Two of them are set this way :
    String control: value changed
    Tree control : mouse down
    The problem is that the String control is used both to display
    and modify values within the tree. Click an item, its name is
    displayed in the String control, modify the String control, the
    new value is reflected into the Tree control.
    The issue is when I edit a string inside the String control and
    click another item in the Tree Control, the first event fired is
    the Mouse down event on the Tree control. Then only the
    Value changed event is fired.
    What happens is that case is the value edited in the String
    control gets overwritten with the new clicked item's value,
    then it is saved inside the previous item's value.
    Is there a way to give a kind of priority on some events
    rather than others ?
    David Koch

    How is LabVIEW "nasty, nasty"?
    While it isn't doing what you want for your particular situation, it is doing exactly what it is supposed to do and is pretty logical.
    1.  You are in a control.
    2.  That control's value isn't update until you leave it.
    3.  Your method of leaving the control is by clicking on something else  (the mouse down).
    4.  The mouse down is what happens first, once LabVIEW detects the mouse down on another control, it then says, okay, now I need to take the focus from the first control and place it here.
    5.  It is the loss of focus from the first control that is what fires the value change event on the first control.
    So the precise order of events is:
    1.  Mouse Down event on control 2
    2.  Value change on control 1
    and that makes perfect sense.
    Your idea of reversing the order of events does not make sense to me.  I want LabVIEW to enqueue events as they happen, not rearrange them.  Supposed some other part of your VI is simultaneously issuing another value change event, or a user event.  Where should that event fall into the queue related to the other events you've had LabVIEW rearrange?
    From what I've seen from this message of yours and others in the past is you get quite upset when LabVIEW doesn't conform to your vision of the world and rather than figuring out how LabVIEW works and how to work with it, you try to fight how LabVIEW works and then take to the forums to complain.  If that is actually picture of you in your user icon, then that is exactly how I envision you while you are working on the computer.
     

  • Line Item Value change in MIRO Transaction

    I have one  requirement i.e as follows.
    <b>Line Item Value change in MIRO Transaction</b>
    After getting the items in table control of  the miro screen of a particular order.
    I have to clicked on edit own condition of selected item.
    then it will show another screen ( create invoice document item - conditions)which have the all condtions details like
    Fra1 , frb1 , sd%  ,  Penalty % , gross price , frieght charges etc.
    In this screen first time it is showing line item as
    in the miro intial screen i.e. if u click po item
    10 it will show 10 only.
    after  updating fra1  value , i came back to the main screen at that time it is asking that select the any one of three.
    after selecting manual selection its fra1 was changed.
    once again if i go to the same line item by clicking
    the edit own condition(13 column if u select all information in textbox whixh is above tablecontrol right corner) it is showing line item as 1 in screen ( create invoice document item - conditions) which  should be line item as 10. ( here i took line item as 10)
    Please clarify this, why it is showing
    first time as  a original line item and
    after updating it is showing like
    for line item 10 -
    1
                   20 -
    2
                  100 -
    10
                  110 -
    11.

    "...it does not work..." is probably the worst description of a problem you can imagine. As an application developer you should know that. Do you use firebug to see what happens once it "does not work"? Any better hints?
    Denes Kubicek
    http://deneskubicek.blogspot.com/
    http://www.apress.com/9781430235125
    https://apex.oracle.com/pls/apex/f?p=31517:1
    http://www.amazon.de/Oracle-APEX-XE-Praxis/dp/3826655494
    -------------------------------------------------------------------

  • How to put a page break when a value changes

    Hi there, I am very new to BI Publisher. I realize this is a really SIMPLE question, but I can't seem to find a CLEAR answer.
    I have a set of data that I have a repeating group for in my RTF template and it works great. But I want to have a page break each time one of the values changes and I cannot figure out how.
    here is the xml
    <?xml version="1.0" encoding="UTF-8" ?>
    <!-- Generated by Oracle Reports version 6.0.8.28.0 -->
    <PIR05>
    <LIST_G_ITEM_NO>
    <G_ITEM_NO>
    <PAGE_NO>0</PAGE_NO>
    <ITEM_NO>4242301</ITEM_NO>
    <ITEM_DESC1>13MM Aries Cell Assembly</ITEM_DESC1>
    <LOT_NO>123</LOT_NO>
    <LOT_DESC>4242301</LOT_DESC>
    <SUBLOT_NO />
    <LOCATION>2IRE</LOCATION>
    <GRADE_CODE>NONE</GRADE_CODE>
    <ITEM_UM>Each</ITEM_UM>
    <ITEM_UM2 />
    <LINE_NO>614</LINE_NO>
    <COUNT_NO>614</COUNT_NO>
    <P_ITEMUM2LABEL />
    <P_ITEMUM2DASH />
    <F_ITEMUM2>1</F_ITEMUM2>
    <P_CSITEMUM2_LABEL />
    <P_CSITEMUM2_DASH />
    </G_ITEM_NO>
    - <G_ITEM_NO>
    <PAGE_NO>0</PAGE_NO>
    <ITEM_NO>4242301</ITEM_NO>
    <ITEM_DESC1>13MM Aries Cell Assembly</ITEM_DESC1>
    <LOT_NO>1232</LOT_NO>
    <LOT_DESC>4242301</LOT_DESC>
    <SUBLOT_NO />
    <LOCATION>2IRE</LOCATION>
    <GRADE_CODE>NONE</GRADE_CODE>
    <ITEM_UM>Each</ITEM_UM>
    <ITEM_UM2 />
    <LINE_NO>615</LINE_NO>
    <COUNT_NO>615</COUNT_NO>
    <P_ITEMUM2LABEL />
    <P_ITEMUM2DASH />
    <F_ITEMUM2>1</F_ITEMUM2>
    <P_CSITEMUM2_LABEL />
    <P_CSITEMUM2_DASH />
    </G_ITEM_NO>
    <G_ITEM_NO>
    <PAGE_NO>0</PAGE_NO>
    <ITEM_NO>4242301</ITEM_NO>
    <ITEM_DESC1>13MM Aries Cell Assembly</ITEM_DESC1>
    <LOT_NO>562354</LOT_NO>
    <LOT_DESC>4242301</LOT_DESC>
    <SUBLOT_NO />
    <LOCATION>WOR RECV</LOCATION>
    <GRADE_CODE>NONE</GRADE_CODE>
    <ITEM_UM>Each</ITEM_UM>
    <ITEM_UM2 />
    <LINE_NO>603</LINE_NO>
    <COUNT_NO>603</COUNT_NO>
    <P_ITEMUM2LABEL />
    <P_ITEMUM2DASH />
    <F_ITEMUM2>1</F_ITEMUM2>
    <P_CSITEMUM2_LABEL />
    <P_CSITEMUM2_DASH />
    </G_ITEM_NO>
    </LIST_G_ITEM_NO>
    <WHSE_DESC>OPM INVENTORY ORG</WHSE_DESC>
    <CS_NODATA>617</CS_NODATA>
    <CYCLE_NO>000000014</CYCLE_NO>
    </PIR05>
    I want the g_item_no (repeating group) to have a page break each time LOCATION changes.

    You can declare two variables, to hold the previous and current LOCATION values and break the page when it differs.
    Or just before your end-for-each, have this code.
    <?if:position()!=1 and position()!=last() and LOCATION!=following::LOCATION[1]?><xsl:attribute name="break-before">page</xsl:attribute><?end if?>
    Ensure that its placed in a form field.
    This will have a page break when LOCATION changes.

  • Multicolum​n listbox value change and mouse up event in one case of event structure

    Hello All,
    Am facing two problems:
    1. I have two multicolumn events, one is value change for deleting the rows of Multicolumn listbox and another one is mouse up for sorting the columns. But I can't combine both the events in one case. And if I create two separate cases then each time the event of mouse up executes and sorting takes place irrespective of selection of delete event.
    2. I have a selection VI in which user selects which parameter he wants to show it in a multicolumn listbox. I want this parameters to be retain or stored when next time I run the VI after closing it.
    Am using LabVIEW 11. Pls reply soon.
    Thanks & Regards,
    Manisha 

    try this
    Beginner? Try LabVIEW Basics
    Sharing bits of code? Try Snippets or LAVA Code Capture Tool
    Have you tried Quick Drop?, Visit QD Community.
    Attachments:
    Untitled 2.vi ‏12 KB

  • Double value change event if cursor is set busy (LV2009)

    Hello everybody,
    I just migrated from LV 8.0 to LV 2009 (on linux) and now got problems with a value change event. I want to send a command if a button is pressed and send another one if the button is released. After sending the command I need to wait for an acknowledge from the receiver and to avoid user interaction in between I lock the cursor with "set busy" VI until the acknowledge is received. To see, when the button is pressed or released, I use a value change event. Inside the event structure the cursor is set busy.
    This worked reliable in LV 8.0 but not any more in LV 2009. The button's mechanical action is set to "switch until released" and if I press the button and keep it pressed it is reset to false automatically. The value change event is fired twice instead of only once (see attached vi) and "new value" is one time true and one time false. This doesn't happen if the mechanical action is set to "switch when pressed".
    Does anybody have an explanation or a workaround for this behaviour? Am I doing something wrong or is this a bug in LV? For now I'll just keep the cursor unlocked.
    Thanks for your help.
    Attachments:
    setMouseBusy_01.vi ‏11 KB

    Hi ckis,
    attached you'll find your modified example, it should do the trick now.
    Regards,
    Bernd
    Attachments:
    setMouseBusy_01.vi ‏9 KB

  • Using a Global as a value change in an Event Structure

    I have many events I want to react to based on Global buttons.  How do I get the Event Structure to recognize a global button value change?  This screen shot is one of my many attempts.  So far my events only change with a real button on the FP.
    Thanks in advance,
    Doug
    Attachments:
    Event Structure.JPG ‏147 KB

    nonecure wrote:
    Jim,
    The Value (Signaling) does not work either.
    I would rather not use a notifier, so maybe I need to get away from using an event structure.
    Thanks
    It should work if your code was executing correctly. The image you posted...
    may be the reason.
    If you watch the code in execution highlighting it may help you figure what is happening.
    1) There is no guarentee that "initialize" will be written to the local "State" before the loop starts running. Use a shift register to track your state from iteration to iteration.
    Do you get any errors?
    Ben 
    Ben Rayner
    I am currently active on.. MainStream Preppers
    Rayner's Ridge is under construction

  • How can I fire an event case on the value change of an indicator, or a network variable?

    Hi!  I have an event structure setup to look for a value change of an indicator on the front panel.  The indicator is updated by the value of a boolean network-published shared variable through a seperate parallel loop that is polling all of the network-published shared variables.  The event, however, does not fire when the indicator changes value.  I have switched the indicator to a control and tested it with user interaction and that works just fine.
    I want to use the event structure space for my code exectution because it seems logical that that is where it would go, and it will help keep my block diagram tity.  The code is also something I would like executed with the front pannel temperarily disabled.  I would rather not have the code in my network-variable polling loop because again the tity issue.   I would also rather not use a notification VI wired to an independent loop for this particular code.
    Is there a way to have an event structure fire an event with the value change of an indicator, or a network variable directly?
    Thanks for your input.
    LV 8.5
    -Nic

    Thanks for the reply.
    I went about things a little differently, but got them to work so..... .  It really was not my desire to have a boolean indicator on the front panel.  As previously stated, my ultimate goal was to have an event fire on the change of a network variable, which I had to poll for anyway but that is tucked away in a section where I am handling all my network variables.  I ended up using that Create User Event, Register User Event, and Generate User Event SubVIs to handle the task.
    I've read the help for all of those SubVI's and it is not entirely clear to me if the event fires every time the "Generate User Event" receives some inputs, or if it only fires when the value changes.  I could do a test to find out.  It wouldn't be too difficult to add a shift register or a feedback node and place the Generate User Event in a case structure so that it is only fired when the input changes state.

  • New Page in ALV for Value Change on a Field

    Is it possible to trigger a new page while prinitng from ALV whenever a value changes in a column.
    Thank you,
    Shashi Reddy

    Hi,
    Yes it is possible to add page breaks on a particular column while previewing/printing from ALV.
    Declare a structure like
    DATA:  gs_print    type lvc_s_prnt.
    and before calling set_table_for_first_display, write
    gs_print-grpchgedit = 'X'.
    Now pass this structure to the method as follows:
        call method grid->set_table_for_first_display
             exporting
               is_print         = gs_print
               is_layout        = gs_layout
               is_variant       = gs_variant
               i_save           = 'A'
               i_default        = 'X'
             changing
               it_fieldcatalog = gt_fieldcat[]
               it_outtab        = g_t_outtab[]
               it_sort          = gt_sort[].
    Run the report. Now when you are in the print preview mode, press the sort ascending or descending button on toolbar (without selecting a column). A dialog box appears asking for sort order. Add the required field, from the available list on right hand side, on which you want a page-break. In the last column titled NG of this sort order dialog box, write * for page feed or UL for line feed. Press Copy button to see the effect.
    Hope this helps.
    Regards
    Shehryar

  • Using md5 in a manul tabular form to compare if column value changed

    Version: Application Express 3.2.0.00.27
    Hello,
    I am creating a manul tabular form using apx_item in my select statment that is the source for the query in a report region. I am using a collection. The collection creation statement is:
        apex_collection.create_collection_from_query(
           p_collection_name => 'DELEG_COLL',
           p_query           => 'SELECT authid
                               ,empid empid
                               ,to_char(deldate,''DD-MON-YYYY'') deldate
                               ,delscope delscope
                               ,dellimits dellimits
                               ,subdelrights subdelrights
                               ,to_char(delexpiry,''DD-MON-YYYY'') delexpiry
                               ,to_char(datedelremoved,''DD-MON-YYYY'') datedelremoved
                               ,delremovalcomments delremovalcomments
                               ,delegator delegator
                               ,''O'' original_record
                               ,wwv_flow_item.md5(delscope, dellimits, subdelrights,
                                  to_char(delexpiry,''DD-MON-YYYY'') delexpiry,
                                  to_char(datedelremoved,''DD-MON-YYYY'') datedelremoved,
                                  delremovalcomments, delegator)
                               FROM tbl_delegations
                               where empid = v(''P12_EMPID'')',
           p_generate_md5     => 'YES');The above code is giving me an error in the function
    wwv_flow_item.md5(delscope, dellimits, subdelrights,
                                  to_char(delexpiry,''DD-MON-YYYY'') delexpiry,
                                  to_char(datedelremoved,''DD-MON-YYYY'') datedelremoved,
                                  delremovalcomments, delegator)It doesn't seem to like where I attempt to convert date column delexpiry and datedelremoved to a varchar. I am doing this as in the db they are dates and inorder to using the md5 function to compare if the values have changed and only update rows where the values changed.
    There error that I get is:
    ORA-20104: create_collection_from_query Error:ORA-20104: create_collection_from_query ParseErr:ORA-00907: missing right parenthesis
    In the collection I am trying to store the md5 hash result. I haved all the update and insert logic working expect for date type columns. THose give the above error.
    I thank you ahead of time for your assistance!
    A. Shalon

    Helen,
    Not sure I fully understand your goal.  We don't use "tasks" at all but if you are looking to have your workflow check certain valus and be able to send email messages to people based on whatever, then you can certainly do that (as long as your Sharepoint
    has the email setup.  We do this for alot of workflow tasks.
    So, in the workflow you can have a blanket statement like what I previously listed:
    if Current Item:hiddenStatus  not equals Current Item:Status
        .... do something
    or you can do something like:
    if Current Item:hiddenStatus equals "In-Progress"
        .... do something
    Else if Current Item:hiddenStatus  equals "Completed"
        .... do something
    or combine the two and do nested "if" statements.  Then you add an email statement wherever you need it like:
    if Current Item:hiddenStatus  equals "Completed"
       then email "these users"
    To add the email part, just type in "email" on the line where you want to add a statment.  There is only one option to choose from.  That will display the line "then email these users".   The "these users" will be a link.  When you
    click it you will get a popup to add the email info.  We typically will send the email to a user (or users) that are already listed in one of the PeoplePicker fields.  On the email form, you can type in your own text, designate that a value is based
    on a column value (like our PeoplePicker), designate that a value is based on a workflow variable, add a link to the current item, etc.  To get to these options you will click the button to the right of the fields or use the "Add or Change Lookup" button
    in the bottom-left for the text area.  There is alot you can set in the mail.
    Does this help answer your question?
    - Peter

Maybe you are looking for