Universal Robots Forum

Link JButtons to DigitalO (Swing)

Hello Everyone,

I am a beginner with the URCap Swing Programming and require a help with this. I have to create Jbuttons and Radio Buttons on the Program node display and integrate it to Tool digital IO’s using swing programming method.

I have created the JButtons and Radio buttons included the actionListeners too. Now i am unable to link the DigitalIO using actionListener. I am not able to get the right way to declare the digitalIO or use it inside the ActionListener just to turn ON or OFF. I did refer to [com.ur.urcap.sample.manipulateIO.tar.gz] and used similar comand lines still not able to get it right. Can anybody help me with it or Refer me to a sample program which would help me?

Thanks for the time

program node view:
button.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){

Program Node Contrribution:
public void yourMethod(){
DigitalIO output=getDigitalIO(tool_out[0]):

this is a little example of how it works generally


Firstly thanks a lot for the quick reply. I tried your solution and got these errors
tool_out[0] - cannot be resolved to a variable, so i changed to the way i declared the DigitalIO
private DigitalIO tool_in1;
then there is error with getDigitalIO - “The method getDigitalIO(DigitalIO) is undefined for the type JButtonProgramNodeContribution”. So should i create a method DigitalIO? Very sorry if it was a basic question.

Thank you

To get your IO in your contribution:

    private final String TOOL_IO_KEY = "tool_in[0]";
    DigitalIO toolIO0;
    Collection<IO> ios = apiProvider.getProgramAPI().getIOModel().getIOs(IOFilterFactory.toolFilter());
    Iterator<IO> it = ios.iterator();
    while (it.hasNext()) {
        IO nextIO = it.next();
        if (nextIO.getName().contains(TOOL_IO_KEY)) {
            toolIO0 = nextIO;

having toolIO0 you can fire a setter and getter to actually fire the IO with your button e.g.

public void setToolIO(boolean signal){

In your view:

    ioBtn.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent actionEvent) {
DigitalIO getDigitalIO(String defaultName){
	Collection<DigitalIO> IOcollection = apiProvider.getInstallationAPI().getIOModel().getIOs(DigitalIO.class);
	int IO_count = IOcollection.size();
	if(IO_count > 0){
		Iterator<DigitalIO> IO_itr = IOcollection.iterator();
			DigitalIO thisIO = IO_itr.next();
			String thisDefaultName = thisIO.getDefaultName();

				return thisIO;
	return null;

You can use this one

Thanks a lot for taking the time to help me :slight_smile:

Thanks a lot, the code worked. Had a little things to change. Thanks again for the effort :slight_smile: :slight_smile: