Comparing LabVIEW OOP Class Hierarchies
Hello all,
The Question
Does anyone know of a tool for comparing LabVIEW class hierarchies? (Like "Compare VI Hierarchies" for .lvclass hiearchies?)
For Example
Let's say I have foo.lvclass in two projects and I want to compare the two instances and their respective members. Does one instance have methods that the other doesn't? Does a method or private data differ?
Why?
I have several applications with dozens of classes, many of which should be interchangable, and I want to quickly determine which classes are the latest, perhaps consolidating some common base code.
I thought about posting this as a suggestion on the Idea Exchange, but I wasn't sure if I'm just not seeing functionality that's already there.
Thanks very much,
Jim
Solved!
Go to Solution.
Hi Jim,
There does not appear to be any way to do this. The closest functionality I could find was to use the Compare VIs/Compare VI Hierarchies to compare the .ctl files for two classes. The LabVIEW Help topic documents how to do this:
http://zone.ni.com/reference/en-XX/help/371361L-01/lvhowto/comparing_vis/
However, this does not really achieve the functionality you are looking for. Thank you for posting this idea to the Idea Exchange!
Catherine B.
Applications Engineer
National Instruments
Similar Messages
-
ALV like LIST GRID BLOCKED and HIRARCHIC using oops class SALV
Hi ,
Can any one let know me is it possible to display all the Flavours of ALV like LIST GRID BLOCKED and HIRARCHICAL
using oops class CL_GUI_ALV and class CL_SALV.
and the relevant events with respect to the type of ALV.
regardsHello
Have you had a look at the documents of Rich Heilman:
[ALV Object Model - Simple 2D Table - Event Handling|https://www.sdn.sap.com/irj/sdn/go/portal/prtroot/docs/library/uuid/cda3992d-0e01-0010-90b2-c4e1f899ac01]
[ALV Object Model - Hierarchical Sequential List - The Basics|https://www.sdn.sap.com/irj/sdn/go/portal/prtroot/docs/library/uuid/b0f03986-046c-2910-a5aa-e5364e96ea2c]
[ALV Object Model - Simple 2D Table - The Basics|https://www.sdn.sap.com/irj/sdn/go/portal/prtroot/docs/library/uuid/eac1fa0b-0e01-0010-0990-8530de4908a6]
Regards
Uwe -
Are LabVIEW OOP "Helpers" modifiable?
I am finally "byting the bullet" and attempting to refactor one of my Projects to use LabVIEW OOP (it seems to me ideally suited for OOP-ifying).
But I have a few "picky issues". I don't always like the way LabVIEW "helps" me. Some things I can change (like the default Class Icon), and I do.
But others I'd like to change to conform to my own personal style. Here's an example -- create a New VI for Data Member Access. Works fine, but the Error terminals are named "error in (no error)" and "error out", while I use "Error In" and "Error Out" (note the Silver Controls also use the latter "prettier" names). While I'm thinking of it, what if I want to use Silver (or System, or even Classic) Controls?
Another thing is that I've try to "encourage" myself to use Revision History by turning on the Option "Prompt for a Comment when a VI is saved". Each time you create a New VI for ... there appears to be a whole lot of "saving" going on in the background because I need to hit "OK" (for saves to Historylv_icon.lvlibp) several times.
Are the (I presume scripting) processes used to help us available and modifiable? I do realize that if I start messing around, I could create a real mess, but that's why Re-Install was invented! If not, I'll just Grin and Work Around It.
Bob Schor
Solved!
Go to Solution.Take a look at <LabVIEW directory>\resource\Framework\Providers\LVClassLibrary\NewAccessors, and then into "ArrayElementScripter" and "BaseAccessorScripter". There are the codes which make "magic" when you create new accessor. And there are "Custom User Scripting For New Simple Accessor VI.vi" and "Custom User Scripting For New Array Element Accessor VI.vi", where you can put your own code called when accessor is created - use these two VIs, and there would be no need to reinstall whole LV, just make backup copies of these two.
-
Comparing user defined classes ???
class A
int i=10;
class B
int i=10;
//int k = 30;
As we compare both primitive variables,
Is it possible to compare the above A and B classes.
since A and B consists of same variable and same data,
i should get o/p as both are same.
Is it possible to compare like this(classes) ????
but when i remove comment from Class B
the o/p should be both are not same.
with out making a single change in the code. is it possible ?????
i tried it with Comparator...but code need to be change when i remove comment from Class B.Waitaminnit.
What you're asking for doesn't make any sense.
You want class A and class B to compare a certain way, but then if you change the code for class B, you want them to compare a different way, without changing any other code?
That's fairly ridiculous. Whatever is doing the comparing should know a priori about the important stuff in class B. You can't just come along later and change class B such that the set of important stuff is now different and expect other code to magically know this.
I suppose you could have the Comparator do some weird, ugly-asss reflection and apply some rules to its result, but ick.
Also, you shouldn't even be trying to compare A and B unless one descends from the other, or they descend from a commom ancestor that has all the fields you're going to use in the comparison.
For instance, if B extends A, then you can get rid of the i in B. The comparison would be implemented on A only, and would treat everything as an A. This works because a B is an A. -
Runtime types and class hierarchies etc...
Hi,
I hope this is not an obvious question but I was just wondering how the new Generics feature(?) would behave in terms of class hierarchies.
For example, could I do something like this:
Set<Throwable> myThrowableSet = new HashSet<Exception>();
If so, could I then do this:
myThrowableSet.add(new Error());
or would I only be able to add something which is an exception?
Thanks,
Mark
p.s I realise you would never actually want to do the above but I am just interested in the behaviour.Reading that spec8.pdf I mentioned earlier (do you know the one I mean) it talks about "Raw Types". It mentions that you can do stuff like:
HashSet myHashSet = new HashSet<Exception>();but that when mutatable method calls are performed on myHashSet, "unchecked" warnings are given (I guess at compile time). I guess this is still the case?
For me, it is very important to know the behaviour of Generics because at the moment I generate Typesafe collection classes and I am trying to make them as forward compatible as possible. Looks like I need to remove this static method:
SetTypesafeClassName SetTypesafeClassName.convertType(TypesafeSet s);but I can leave this instance method in:
Set getRawType();Here, TypesafeClassName is replaced by "Throwable", "Exception" or whatever...
Thanks,
Mark -
Does Labview Support a Hierarchical VHDL Instantiation into Labview Clip Nodes?
Hello,
Does Labview Support a Hierarchical VHDL Instantiation into Labview Clip Nodes?
I followed the available help, and called out the top-level VHDL in my XML file. Unfortunately, my lower level VHDL components are being read as a Black Box and I am getting an error during compile. So, what must I do to instantiate hierarchical VHDL code into a clip node?
Solved!
Go to Solution.Yes, but you need to include the paths to all of your VHDL files in your CLIP XML. This tells LabVIEW which source files to copy into the compilation directory. Here is an example (which assumes the source files are in the same directory as the XML):
<CLIPDeclaration Name="NI Example CLIP">
<FormatVersion>1.0</FormatVersion>
<CLIPVersion>1.0.0</CLIPVersion>
<HDLName>ExampleClip</HDLName>
<ImplementationList>
<Path>ExampleClip.vhd</Path>
<Path>SubComponent.vhd</Path>
<Path>Fifo32.ngc</Path>
<Path>ExampleClip.ucf</Path>
</ImplementationList> -
Imlementing synchronized access to shared objects in LabVIEW OOP
Many objects in object-oriented programming have an
identity, such as a file, a front-panel object or a hardware device.
These objects cannot be modelled using present LabVOOP (LabVIEW Object Oriented Programming) objects as
LabVOOP objects gets copied as wire is branched; multiple different
wires cannot all represent a single object. This issue has been
irritating the community of LabVIEW users since the release of LabVOOP
a few months ago.
It seems that there is a huge demand for
objects with unique identity i.e. by-reference objects in LabVIEW. The
central problem why LabVOOP propably doen't have these objects is the
difficulty in implementing synchronized access to these objects from
multiple parallel threads. The problem of synchronized access can be
divided into two different separate topics. First how the
sychronization should be implemented in LabVIEW runtime engine. Second
how this synchronization mechanism should be visible to the developer.
I'd like to start this thread to discuss these two issues.
Synhronization under the hood
Traditionally
people talk about locking of an object and about get-modify-set pass
when accessing the object. Locking is traditionally done by acquiring a
mutex for an object, modifying the object and releasing the mutex so
that other threads can access the same object instance. This is how
inter-thread synchronization is traditionally done. However, besides
the mutex based locking, the computer science community has innovated
also different kinds of methods on synchronizing the access to objects.
One way to get object-level synchronization is modify the
runtime engine so that it only allows a single method of a synchronized
object to run at any time. This mechanism of syncrhonization is
implemented in programming languages like O'Haskell, which is a Haskell
variant with object orirented features.
Also different
transactional mechanisms[1,2] have been successful. In transactional
mechanisms multiple threads are allowed to access a synchronized object
simultaneously. As each method accessing an object commits their
changes, they verify that no other object has modified the object
simultaneously in a manner than would break the transaction. If such a
modification has occurred, everything is rolled back. Transactional
mechanism do not suit to every possible situation as not everything can
be rolled back. For example it's hard to roll back an action that
somehow modifies the physical world.
User experience of synchronization
How
the synchronization is generally implemented in LabVIEW shouldn't be
directly visible to the developer end-user. The developer should
understand the general concepts of synchronization to take full
advantage of it, but in general the synhronization mechanism should be
integrated directly to development environment. There should in general
be no need to acquire a mutex by calling acquire mutex node but instead
the end-user should be able to specify which data needs synhronized
access in more sophisticated way.
In the following I propose a
mechanism of integrating the synchronized access of by-ref objects to
the development environemnt of LabVIEW. The proposal is very
preliminary but I hope it breaks the ice and the community would start
innovating in how should NI implement the syncrhonization support in
the user interface of LabVIEW.
Wire level synchronization
Only
methods can access object private data members. In synchronized access
to the object, it's the methods accessing the private data members that
need to be synchronized. The private data members are accessed by
applying unbundle node to the class wire and data is written back to
the object using bundle node.
What I propose is the following.
An unbundle node could either be normal or "synchronized". A
synchronized unbundle would guarantee the access to the private data
members in synchronized manner. All data wires originating from
synchronized unbundle would be of synchronized type, in a little
similar manner as a dynamic dispatch wire is of special dynamic
dispatch type. Such a wire must evetually be connected to a bundle
node. When the wire is bundled back to the originating object, the
synchronization requirement is released.
These synchronized
wires would look somewhat different from normal wires so that the
developer instantly knows that the wire is synchronized. The developer
can branch the wire, but only one wire branch can own the synchronized
type. The developer could easily select which wire would be
syncrhonized by Ctrl+clicking the wire. Such a wire can be considered
as a combination of a data and a mutex, even though mutexes don't need
to be the underlying synchronization method. The wire just guarantees
that there is a mechanism in the runtime engine that makes sure the
access to the wire data is synchronized.
There is a need to wire
data originating from a non-synchronized wire to a synchronized wire so
that it can replace the private data member of the class. This is
accomplished with a new node similar to bundle node, that would allow
replacing the data in a syncrhonized wire with some data originating
from a non-synchronized wire.
The synchronized wire can be
connected to a front panel controls of special syncrhonized type. This
way the synchronized wire can originate from a method and allow passing
the synchronized data to the calling VI and back to another method.
This is practical for example in a situation when the developer wants
to run different analyzes to a data class but don't want to rewrite all
the existing data analysis tools as class members. So the developers
writes a syncrhonization acquiring getData method that let's the
calling VI to access the syncrhonized data. Then the developer passes
this data to an analysis VI and passes the result back to a setData
method that writes the result back to the class wire.
There
will probably be technical problems in allowing the user to connect
such a synchronized wire to all existing VIs since these VIs. Therefore
the programming model for all nodes that do not support such
synchronized wires will be branching the wire and passing the
non-synchronized wire branch to the node and then bundling the result
back to the synchronized wire.
To increase performance and
decrease unnecessary buffer copies when a syncrhonized wire is
branched, if the syncrhonized wire continues directly to the new bundle
synchronized wire node, no buffer copy is made.
Discussion
The
syncrhonized access to a by-ref LabVOOP objects can be implemented in
multiple ways by National Instruments. The synchronized access should
be divided to two different and independent parts: 1) the user
experience of synchronization and 2) the runtime engine synchronization
mechanisms. As LabVOOP objects have special properties compared to
other LabVIEW data types, optimal user experience can be gained by
designing the user experience specifically for LabVOOP objects. From
user experience point-of-view this syncrhonization mechanism may not
work for other data types. Separating object syncrhonization from
synchronization of other data types is advantageous also for other
reasons. Due to the fact that object data can only be accessed via
object methods, more advanced synchronization methods may be used with
objects than can be used with other data types. O'Haskell
synchronization implementation is an example of this. Integrating the
synchronization directly to the user interface allows NI to change the
mehcanisms under the hood, when computer science comes up with more
advanced methods. Therefore NI could begin with traditional and quite
easy mutex-based synchronization and later move to more advanced
perhaps transaction based syncrhonization methods or even combinations
of multiple different methods.
I hope this topic generates
discussion that would help NI to implement an excellent synchronization
mechanism in LabVOOP. I hope that all talented individuals in the
community participate this discussion to help NI to reach this goal. I
also hope that if you just have time, it would be great if you could
surf the computer science resources to find out what kinds of new
techniques there exists for synchronizing access to shared resources. A
Large community may find much more innovative solutions than a few engineers at NI. Let's give NI the power of open source design
Tomi MailaHello Tomi,
First, thank you for taking the time to write such a well
though-out suggestion. Are you familiar
with the “LabVIEW Object-Oriented Programming: The Decisions Behind the Design”
document? I think the reason we chose to implement a ‘by
value’ strategy, is that is more in line with the LabVIEW programming paradigm
of dataflow, and would make sense to most of our LabVIEW users.
I think your suggestion is interesting, and it does
highlight the need to think outside of the conventional LabVIEW box and look to
some of the innovative things other languages do. However, I think we all agree that
synchronization takes careful planning and extra work for the programmer. Even with an ‘ideal’ solution I see no way
around this. For LabVIEW users today,
one great way to get synchronized ‘by reference’ semantics with your objects is
to use a single-element queue to pass your object. The queue itself is passed ‘by reference’ and
is inherently synchronized! The does
have the disadvantage of adding one more small layer of complexity to your
program, but some complexity would have to be introduced in any situation. The other disadvantage with this is that it
is not always an intuitive way to implement your program and requires some
amount of LabVIEW knowledge before one would generally come across this
technique.
In any case, I appreciate the time and effort you put in to
your suggestion. Please make sure that
you submit the suggestion formally through the NI Product Suggestion Center so
that it can be reviewed by some of the decision makers here.
Thanks again,
Travis M
LabVIEW R&D
National Instruments -
Hello,
I'm working on some java style interfaces for labview for hot swapping of instrumentation for design patterns. When I try to port this code, developed on Labview 8.5 back to labview 8.2, the code it generates crashes labview (both 8.5 and 8.2).
Included is a small snipet of the work that demonstrates this behavior.
It includes to classes:
untitledProject1 - the containing project (version 8.5)
FunctionGeneratorI - Similar to a Java style interface (A class with all Dynamic VI's with no useful functionality)
FunctionGenerator33220a - An intended implementation of Function generator (only a few functions implemented)
and a folder "labview8_2Distribution"
Which contains the port of the 8.5 code to 8.2.
To recreate the error:
A.
1. Open "labview8_2Distribution\Users\Laptop\Desktop\object\Untitled Project 1" (8.2 save)
2. Verify it crashes labview 8.5 and labview 8.2.
3. Watch labview crash?
B.
1. Open the "Untitled project 1" in the root directory. (Using labview 8.5)
2. Save the project as a labview 8.2 type.
3. Try to open the saved version with 8.5 and 8.2.
4. Watch labview crash?
Greg Sonnenfeld
Attachments:
error.zip 885 KBHello Karunya,
In regards to your questions:
>Can you post your code? Have you tested this by creating another project?
Do you have an xcontrols in your projects? Do you have typedefs? Do you
have a LVOOP constant on your block diagram? Are you also using Classes?
I cannot post the cost as it is way too big. Not really my code but a spaghetti code from a previous programmer. I think problems saving it to a previous version have to do with a few things:
1) Memory - I have 1 GB of RAM and I am running XP. I notice the available RAM dropping quickly as it is saving and then it blow up.
2) Long Filenames - The directory path of the original file is incorporated into the saved "previous version" of the code. While a good design, it does make the file/path a bit longer when saving
3) One of teh things it saves is the drivers and their menus. This is due to the drivers being in a subdirectory of the original code and not in the c:\program files\national instruments\labview 8.5\instr.lib directory. I saw this when I tried to save the file as an LLB.
4) If I work with smaller parts of the code without long paths, it saves fine.
There probably are xcontrols, definitely typedefs, no LVOOP's or Classes. Hope you can do something with all this. It just seems that converting to a later version of the code should be reversable. Thanks.
Michael -
Using LabVIEW OOP Objects with TestStand 2010
I need to use labview classes in Teststand 2010. I am not able to pass reference between Labview and Teststand.
Or leave it in Labview and use an action engine.
http://forums.ni.com/t5/LabVIEW/Community-Nugget-4-08-2007-Action-Engines/m-p/503801?view=by_date_as...
That's what I have done.
Regards
Ray Farmer -
Comparator for different classes
I have a crazy need to be able to hold a few hundred thousand objects in a Set. These objects can vary from Integers, Doubles to Strings. Normally it seems a HashSet would be the perfect implementation for this, however, this Set is built once and searched through several million times. So it makes sense to have a SortedSet available for this to improve search times. Having different sets for each Class type is not an option.
I've come up with this code, which works fairly well as far as I can tell, but would like your general opinions on how it can be improved. I can't find a failing point, yet, and would like the eyes of many to tell me that I'm wrong - and that it can fail somehow.
public class DifferentObjectComparator implements Comparator, Serializable
public int compare(Object o1, Object o2)
if (o1 == null && o2 == null) return 0;
if (o1 == null && o2 != null) return 1;
if (o1 != null && o2 == null) return -1;
if (o1.getClass() == o2.getClass())
return ((Comparable) o1).compareTo(o2);
if (o1 instanceof Number && o2 instanceof Number)
double retVal = ((Number) o1).doubleValue() - ((Number) o2).doubleValue();
if (retVal < 0) return -1;
if (retVal > 0) return 1;
return 0;
return -1;
}If you know of and/or can think of a better way to do this, please tell. Keep in mind it must use a SortedSet implementation.cvweiss__ wrote:
After a couple of tweaks and some extensive testing I am now satisfied that the following code fully complies with the specifications given in the javadoc for java.util.Comparator. I'm posting this here for those in the future who have this requirement.
public class DifferentObjectComparator implements Comparator, Serializable
public int compare(Object o1, Object o2)
if (o1 == o2) return 0; // good for two nulls or exact same Object
if (o1 == null && o2 != null) return 1;
if (o1 != null && o2 == null) return -1;
if (o1.getClass() == o2.getClass())
return ((Comparable) o1).compareTo(o2);
if (o1 instanceof Number && o2 instanceof Number)
double retVal = ((Number) o1).doubleValue() - ((Number) o2).doubleValue();
if (retVal < 0) return -1;
if (retVal > 0) return 1;
return 0;
return o1.getClass().getName().compareTo(o2.getClass().getName());
if they ALL implements Comparable, wouldn't the Set be
Set<? extends Comparable> theSet;? In which case, the Comparator could be more elegantly written using similar generics, like
public class MyComparator implements Comparator<Comparable> {
public int compare(Comparable c1, Comparable c2) {
if (c1 == c2) return 0;
if (c1 == null && c2 != null) return 1;
if (c1 != null && c2 == null) return -1;
if (c1.getClass() == c2.getClass())
return c1.compareTo(c2);
if (c1 instanceof Number && c2 instanceof Number)
double retVal = ((Number) c1).doubleValue() - ((Number) c2).doubleValue();
if (retVal < 0) return -1;
if (retVal > 0) return 1;
return 0;
return c1.getClass().getName().compareTo(c2.getClass().getName()); // looks weird to me
}no more ugly castings! (well, except for casting to Number, but that's inherent to the weird spec to begin with) -
I have one water distribution system which calls for Labview and another which calls for Lookout. What is the specific difference between the two and what are the applications where one would work better than the other.
Hi,
There are so many differences between the two packages that it will be difficult to describe. One main difference is ease of programming versus programming capability. Lookout gives you the ability to get up and running with a program very quickly. However, Lookout is not easily customizable. This is where LabVIEW shines. LabVIEW can do anything that Lookout can do ( as long as you have the Datalogging and Supervisory Control Module) but you can do much more. LabVIEW is also very easy to use compared to other programming languages.
I would suggest that you call us at 800-433-3488 and ask any specific questions that you may have.
Regards,
Mike
NI -
I NEVER USED OOPS CONCEPT.BUT I GOT A TASK ON ALV REPORT USING class CL_GUI_ALV_GRID, call method SET_TABLE_FOR_FIRST_DISPLAY for ALV . I HAD PASSED THE VALUES FROM INTERNAL TABLE AND GOT OUTPUT IN ALV.
The problem is When i save an layout(default setting button ).
iam unable to get the output for all fields.
if u want i will send screenshots to ur mail
THANKS IN ADVANCE.ok fine,
In the output (alv grid) there is an icon for layout settings.
if i want to save layout (as DEFAULT SETTING) i am missing some fields in output
EX:
mat no | batch | proces order | time | date |
when i save layout (as DEFAULT SETTING) i am missing some fields in output
mat no | batch |
the rest of the field were not displayed.
if u are not clear just ask me. i will send some more examples. -
How to compare LabVIEW executable file?
I have a labview executable file that I build 2 years ago, and with the same source code, I build a new executable file. Does anybody know how to compare the 2 executables?
Well if you built from the same source the functionality should be the same. But if you build the same source with different versions of LabVIEW then you never know. Maybe the new version exposes a hidden bug in your code or fixes one that you depended on.
There is no way to do what you want by examining the bytes in the exe. You have to just do testing. You could either do this manually or automate it using the Unit Test Framework. There is also VI Tester by JKI.
=====================
LabVIEW 2012 -
Packet/Class Hierarchies confusion
Hi,
What I am trying to accomplish is design a program which consists of numerous sections. I am putting the different sections into the project as seperate files by, File -> New -> JavaFile.
I am also taking in user input from the keyboard and what I want is for the variables to be accessed by each section of the project or each file.
I am very new and am having problems with this concept.
So far I have something along the lines of,
The main file: -
public class Initial_Setup
The main file will be the first thing the user sees, they will type in some details and then I want the program to move onto the next section of the program which is in a different Javafile.
I have this set up as: -
class tester extends Initial_Setup
public static void main ( String [] args ) throws IOException
Initial_Setup InitSet = new Initial_Setup();
Then in class tester i'm trying to reference the variable which was used in class Initial_Setup like this,
if (InitSet.numalzonefl1 == 2)
numalzonefl1 is the variable which was filled with a number via keyboard input in class Initial_Setup and I need to use it in class tester. However I get an "Cannot resolve symbol" error.
I was hoping someone could give me some advice on this as my guess is it's fairly easy really. Also how can I, once the Initial_Setup class has finished, get it to move right on over and execute the tester class?
Sorry for the massive post (on a friday as well!!)
Any help really appreciated.
Paul.It looks like the variable might be private. either make get/set methods for it, or make it protected so you can access it in your subclass. It looks like you might want to get a book on OOP design. Bruce Eckle (sp?) has a book called thinking in Java that is a free download. not sure of the web address but a google search should pull it up.
-
Practical Uses of OOP/ Classes
Hi All,
I know how to program using OOP in abap but I cant seem to use it. What are the general uses of this?
Thanks.
TykenHi Tyken,
CLASS and its METHODS are Like a Template/Skeleton, developed with some specific functionality, So we need not write more Lines of codes in our program.If necessary we Just call and Pass the appropriate values to the Methods and then we will get the expexted result.
The object-orientation modeling of a software system is the most important, most time-consuming, and most difficult requirement for attaining the above goals. Object-oriented design involves more than just object-oriented programming, and provides logical advantages that are independent of the actual implementation.
Kanagaraja L
Maybe you are looking for
-
Mini suddenly cuts / switches off
Hi, I own a Mac Mini (1,42GHz, 1Gig ram) and recently it's done some strange things. While working it suddenly switched off. It was like somebody just cut the power. I pushed the button to turn it on again and the led would only appear for about 1s b
-
There,are,restrictions,to,opening,PDF,files,on,an,iPad,or,Android,Device,that,will,open,in ,Microsoft,Internet,Explorer,desktop,or,laptop.,If,I,bought,a,Windows,8.1,tablet,and,had,A dobe,reader,installed,would,I,then,be,able,to,open,the,secure,docume
-
Hi I would need to enter Gross Price in info record using three decimals. As it is now I'm only able to use two. Where can I change this? / Henrik
-
1. FTP client that shows you your progress. If it's going to be 1/2 an hour, it makes sense to something else. Currently, I often use FTPVoyager because it shows me the progress per file and overall. and shows the percent complete so I can estimate t
-
JTABLE - horizontal scrolling only for some columns
Hi all, In my JTABLE I have to scroll the horizontal scrollbar only from column 5 to the last, the columns 0 - 4 should be fixed ! Is this possible ? Thanks in advance, Arpana