Jump to content
View in the app

A better way to browse. Learn more.

OSBot :: 2007 OSRS Botting

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

GUI Help

Featured Replies

Hey guys, so I followed Explv's GUI tutorial to try my hand at adding a GUI for the firs time. So far there's a dropdown box and the user chooses an option. It's saved as a string though. This must be fairly simple but I can't seem to figure it out; I need the option they choose to correspond to an integer value in my script to decide what object an action is being done towards, ie: what ore is being mined.

 

Thanks! I can clear it up more if it doesn't make sense.

Under ideal circumstances you would have enum types for each of the ores and you would instead of switching between strings in the combobox be dealing with objects. However if this is not the case you can always whip out the classic switch statement and deal with it that way. While it's not ideal or tidy, it should be easy for you to understand and should get the job done and should require minimal structure changes

 

edit: hav a quick read of this: https://docs.oracle.com/javase/tutorial/java/javaOO/enum.html

Edited by Apaec

Hey guys, so I followed Explv's GUI tutorial to try my hand at adding a GUI for the firs time. So far there's a dropdown box and the user chooses an option. It's saved as a string though. This must be fairly simple but I can't seem to figure it out; I need the option they choose to correspond to an integer value in my script to decide what object an action is being done towards, ie: what ore is being mined.

 

Thanks! I can clear it up more if it doesn't make sense.

 

Nevermind, I did not realize you meant an object id.  Yeah use an enum.

Edited by Manner

You need to make a JButton which you can label "Start" for example.
Then you need to give it an ActionListener which then sets the ID's of the rocks / locations you want to mine at based on your users selection from other elements in the gui :)

  • Author

Under ideal circumstances you would have enum types for each of the ores and you would instead of switching between strings in the combobox be dealing with objects. However if this is not the case you can always whip out the classic switch statement and deal with it that way. While it's not ideal or tidy, it should be easy for you to understand and should get the job done and should require minimal structure changes

 

edit: hav a quick read of this: https://docs.oracle.com/javase/tutorial/java/javaOO/enum.html

 

Thanks man! I'll definitely read that and put it to use. I may just do the switches for now though as this is a small personal script.

 

If you are using a JComboBox, just use getSelectedIndex() to get an integer, if I read this correctly

 

How do you mean? I am using that, but there's lets say 3 options in the combobox. I want to associate each with a 4 digit integer and then once one is selected have that integer be used in the script.

 

You need to make a JButton which you can label "Start" for example.

Then you need to give it an ActionListener which then sets the ID's of the rocks / locations you want to mine at based on your users selection from other elements in the gui smile.png

 

I do have a start button and ActionListener to start the script, how does it set the ID's tho?

Nvm I think I get what needs to be done. Thanks guys!

Thanks man! I'll definitely read that and put it to use. I may just do the switches for now though as this is a small personal script.

 

 

How do you mean? I am using that, but there's lets say 3 options in the combobox. I want to associate each with a 4 digit integer and then once one is selected have that integer be used in the script.

 

 

I do have a start button and ActionListener to start the script, how does it set the ID's tho?

Nvm I think I get what needs to be done. Thanks guys!

 

Question 2:

He is saying that an easy way to assign a "4 digit integer" which is used for the rock id is by getting the selected index and using a switch case. For instance (pseudo code):

int rockId;
switch(comboBox.getSelectedIndex())
case 0:
rockId = 1111;
break;
case 1:
rockId = 2222;
break;

You would put this code in your action listener. 

public class GUI extends JFrame {

	private JPanel contentPane;

	private Boolean finished = false;

	public Boolean isFinished() {
		return finished;
	}

	public Rock getSelection() {
		return (Rock) comboBox.getSelectedItem();
	}

	JComboBox<Rock> comboBox;

	public GUI() {
		setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
		setBounds(100, 100, 450, 300);
		contentPane = new JPanel();
		contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
		contentPane.setLayout(new BorderLayout(0, 0));
		setContentPane(contentPane);

		JButton btnNewButton = new JButton("Start");
		btnNewButton.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				finished = true;
			}
		});
		contentPane.add(btnNewButton, BorderLayout.WEST);

		comboBox = new JComboBox<Rock>();
		comboBox.setModel(new DefaultComboBoxModel<Rock>(Rock.values()));
		contentPane.add(comboBox, BorderLayout.CENTER);
		setVisible(true);
	}

}

Where Rock.java is defined as

public enum Rock {
	TIN(3151), IRON(215), CLAY(45), COAL(211);
	
	private int color;
	
	Rock(int color) {
		this.color=color;
	}
	
	public int getColor() {
		return color;
	}
}

Using modified color is a much better way to distinguish rocks. Every rock type has lots of ids based on the mesh but the color is the same for all of them, hence it's a better approach. You can either use the enum model comboboxes or get enum fields using the Enum#valueOf() on a String based model.

 

EDIT: those rock colors are not real, it's just for the sake of the example, I can't be bothered opening eclipse and looking through my projects for my actual Rock enum

Edited by Token

  • Author

Question 2:

He is saying that an easy way to assign a "4 digit integer" which is used for the rock id is by getting the selected index and using a switch case. For instance (pseudo code):

int rockId;
switch(comboBox.getSelectedIndex())
case 0:
rockId = 1111;
break;
case 1:
rockId = 2222;
break;

You would put this code in your action listener. 

 

Ohh I got it. Thats so simple too.. thanks Alek!

 

public class GUI extends JFrame {

	private JPanel contentPane;

	private Boolean finished = false;

	public Boolean isFinished() {
		return finished;
	}

	public Rock getSelection() {
		return (Rock) comboBox.getSelectedItem();
	}

	JComboBox<Rock> comboBox;

	public GUI() {
		setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
		setBounds(100, 100, 450, 300);
		contentPane = new JPanel();
		contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
		contentPane.setLayout(new BorderLayout(0, 0));
		setContentPane(contentPane);

		JButton btnNewButton = new JButton("Start");
		btnNewButton.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				finished = true;
			}
		});
		contentPane.add(btnNewButton, BorderLayout.WEST);

		comboBox = new JComboBox<Rock>();
		comboBox.setModel(new DefaultComboBoxModel<Rock>(Rock.values()));
		contentPane.add(comboBox, BorderLayout.CENTER);
		setVisible(true);
	}

}

Where Rock.java is defined as

public enum Rock {
	TIN(3151), IRON(215), CLAY(45), COAL(211);
	
	private int color;
	
	Rock(int color) {
		this.color=color;
	}
	
	public int getColor() {
		return color;
	}
}

Using modified color is a much better way to distinguish rocks. Every rock type has lots of ids based on the mesh but the color is the same for all of them, hence it's a better approach. You can either use the enum model comboboxes or get enum fields using the Enum#valueOf() on a String based model.

 

EDIT: those rock colors are not real, it's just for the sake of the example, I can't be bothered opening eclipse and looking through my projects for my actual Rock enum

 

 

Hmm so each ore/rock has a different color associated with it? I knew they had different colors in-game but didn't think that would correspond well to scripting. Thanks man! When I start my next project with a mining script I will for sure use this. Appreciate it!

Ohh I got it. Thats so simple too.. thanks Alek!

 

 

Hmm so each ore/rock has a different color associated with it? I knew they had different colors in-game but didn't think that would correspond well to scripting. Thanks man! When I start my next project with a mining script I will for sure use this. Appreciate it!

 

Ids change almost every game update so don't use them. If you open the options tab > debug > entity hover debug, you will get a list of what different values are if you hover over a rock. Rocks are a bit tricky but modified colours works and is unaffected by non-specific game updates

  • Author

Question 2:

He is saying that an easy way to assign a "4 digit integer" which is used for the rock id is by getting the selected index and using a switch case. For instance (pseudo code):

int rockId;
switch(comboBox.getSelectedIndex())
case 0:
rockId = 1111;
break;
case 1:
rockId = 2222;
break;

You would put this code in your action listener. 

 

Hey Alek, I have a question regarding this, but for some reason I keep getting errors when trying to PM you as to not clutter this thread. Could you PM me or possibly even add me on Skype? Not sure if you do that.

 

Anyways if neither of those work, I'll explain here just in case.

 

I tried adding the switch to my Action Listener for the sake of this script and then I can use other methods on my next one, but it's telling me the getSelectedIndex cannot be accessed from a static context.

 

Here is what I have in my GUI void:

oreSelector.addActionListener(e -> {
            switch(JComboBox.getSelectedIndex()) {
                case 0:
                    rockID = 1111;
                    break;
                case 1:
                    rockID = 2222;
                    break;
            }
        });

The "getSelectedIndex()" is what gives me the error. Sorry if this is something obvious, I can't get it right tho

 

Edited by imancity

Create an account or sign in to comment

Recently Browsing 0

  • No registered users viewing this page.

Account

Navigation

Search

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.