Hjälp med programmering i java

Trädvy Permalänk
Medlem
Plats
Malmö
Registrerad
Jul 2013

Hjälp med programmering i java

Hej! har en uppgift i skolan att skapa en slags meny som har 4 olika knappar som ska göra olika saker. Jag har gjort så att en knapp startar ett program men nu gör alla 4 knappar det. Vill gärna ha hjälp med hur jag gör så att endast den första knappen startar programmet.
Koden ser ut såhär just nu:
package test1;

import java.awt.Component;
import java.awt.Container;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.IOException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JFrame;

public class Test1 {
public static void addComponentsToPane(Container pane) {
pane.setLayout(new BoxLayout(pane, BoxLayout.Y_AXIS));

addAButton("Starta internet", pane);
addAButton("Bild", pane);
addAButton("Bild2", pane);
addAButton("Stäng", pane);

}

private static void addAButton(String text, Container container) {
JButton button = new JButton(text);
button.setAlignmentX(Component.CENTER_ALIGNMENT);
button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
try {
Runtime.getRuntime().exec("C:\\Program Files\\Internet Explorer\\iexplore.exe");
} catch (IOException ex) {
Logger.getLogger(Button1.class.getName()).log(Level.SEVERE, null, ex);

}
}

});
JButton button2 = new JButton(text);
container.add(button,button2);
}

/**
* Create the GUI and show it. For thread safety,
* this method should be invoked from the
* event-dispatching thread.
*/
private static void createAndShowGUI() {
//Create and set up the window.
JFrame frame = new JFrame("Spelmeny");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

//Set up the content pane.
addComponentsToPane(frame.getContentPane());

//Display the window.
frame.pack();
frame.setVisible(true);
}

public static void main(String[] args) {
//Schedule a job for the event-dispatching thread:
//creating and showing this application's GUI.
javax.swing.SwingUtilities.invokeLater(new Runnable() {
public void run() {
createAndShowGUI();

}
});
}
}

Trädvy Permalänk
Medlem
Registrerad
Maj 2013
Skrivet av AZzzID:

Hej! har en uppgift i skolan att skapa en slags meny som har 4 olika knappar som ska göra olika saker. Jag har gjort så att en knapp startar ett program men nu gör alla 4 knappar det. Vill gärna ha hjälp med hur jag gör så att endast den första knappen startar programmet.
Koden ser ut såhär just nu:
package test1;

import java.awt.Component;
import java.awt.Container;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.IOException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JFrame;

public class Test1 {
public static void addComponentsToPane(Container pane) {
pane.setLayout(new BoxLayout(pane, BoxLayout.Y_AXIS));

addAButton("Starta internet", pane);
addAButton("Bild", pane);
addAButton("Bild2", pane);
addAButton("Stäng", pane);

}

private static void addAButton(String text, Container container) {
JButton button = new JButton(text);
button.setAlignmentX(Component.CENTER_ALIGNMENT);
button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
try {
Runtime.getRuntime().exec("C:\\Program Files\\Internet Explorer\\iexplore.exe");
} catch (IOException ex) {
Logger.getLogger(Button1.class.getName()).log(Level.SEVERE, null, ex);

}
}

});
JButton button2 = new JButton(text);
container.add(button,button2);
}

/**
* Create the GUI and show it. For thread safety,
* this method should be invoked from the
* event-dispatching thread.
*/
private static void createAndShowGUI() {
//Create and set up the window.
JFrame frame = new JFrame("Spelmeny");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

//Set up the content pane.
addComponentsToPane(frame.getContentPane());

//Display the window.
frame.pack();
frame.setVisible(true);
}

public static void main(String[] args) {
//Schedule a job for the event-dispatching thread:
//creating and showing this application's GUI.
javax.swing.SwingUtilities.invokeLater(new Runnable() {
public void run() {
createAndShowGUI();

}
});
}
}

Har aldrig hållt på med Java, men borde det inte vara i stil med

button.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { try { if(text == "Starta internet") { Runtime.getRuntime().exec("C:\\Program Files\\Internet Explorer\\iexplore.exe"); } else if(text == "Bild") { öppna bild1 } else if(text == "Bild2") { öppna bild2 } else if(text == "Stäng") { stäng ner applikationen } } catch (IOException ex) { Logger.getLogger(Button1.class.getName()).log(Level.SEVERE, null, ex); } } });

M-ITX: Fractal Design Node 304 Gigabyte H97N i7 4790k Msi GTX980 Gaming Ballistix Sport 16GB @ 1600MHz

Trädvy Permalänk
Medlem
Plats
Malmö
Registrerad
Jul 2013

@Pamudas:
Hur ska jag lägga in detta i Koden ovanför då? Är rätt ny till programmering så vore kul om du kunde hjälp mig lite

Trädvy Permalänk
Medlem
Registrerad
Maj 2013

Allt som gjorts är att kontrollera texten på knappen, för att sedan ge denna knapp en egen "funktion", d.v.s. starta internet explorer eller öppna en bild/stänga applikationen. Du får själv ta reda på hur du öppnar en bild samt stänger ner din applikation och sedan lägga in den koden i rätt if-sats
Det går även att göra det "bättre" d.v.s med mindre rader kod, men prova om det fungerar först.

package test1; import java.awt.Component; import java.awt.Container; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.IOException; import java.util.logging.Level; import java.util.logging.Logger; import javax.swing.BoxLayout; import javax.swing.JButton; import javax.swing.JFrame; public class Test1 { public static void addComponentsToPane(Container pane) { pane.setLayout(new BoxLayout(pane, BoxLayout.Y_AXIS)); addAButton("Starta internet", pane); addAButton("Bild", pane); addAButton("Bild2", pane); addAButton("Stäng", pane); } private static void addAButton(String text, Container container) { JButton button = new JButton(text); button.setAlignmentX(Component.CENTER_ALIGNMENT); //Här är den nya koden button.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { try { if(text == "Starta internet") { Runtime.getRuntime().exec("C:\\Program Files\\Internet Explorer\\iexplore.exe"); } else if(text == "Bild") { öppna bild1 } else if(text == "Bild2") { öppna bild2 } else if(text == "Stäng") { stäng ner applikationen } } catch (IOException ex) { Logger.getLogger(Button1.class.getName()).log(Level.SEVERE, null, ex); } } }); JButton button2 = new JButton(text); container.add(button,button2); } /** * Create the GUI and show it. For thread safety, * this method should be invoked from the * event-dispatching thread. */ private static void createAndShowGUI() { //Create and set up the window. JFrame frame = new JFrame("Spelmeny"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //Set up the content pane. addComponentsToPane(frame.getContentPane()); //Display the window. frame.pack(); frame.setVisible(true); } public static void main(String[] args) { //Schedule a job for the event-dispatching thread: //creating and showing this application's GUI. javax.swing.SwingUtilities.invokeLater(new Runnable() { public void run() { createAndShowGUI(); } }); } }

M-ITX: Fractal Design Node 304 Gigabyte H97N i7 4790k Msi GTX980 Gaming Ballistix Sport 16GB @ 1600MHz

Trädvy Permalänk
Medlem
Plats
Malmö
Registrerad
Jul 2013

@Pamudas:
Java verkar inte acceptera den koden :/ Men tack för hjälpen iaf

Trädvy Permalänk
Medlem
Registrerad
Maj 2013
Skrivet av AZzzID:

@Pamudas:
Java verkar inte acceptera den koden :/ Men tack för hjälpen iaf

Förmodligen så finns inte button.Text, men sök runt lite så hittar du säkert hur du får reda på texten på knappen som du skapat. Alternativt att du använder variabeln "text" som skickat med i funktionen, redigerar mitt tidigare inlägg med rätt kod istället.

M-ITX: Fractal Design Node 304 Gigabyte H97N i7 4790k Msi GTX980 Gaming Ballistix Sport 16GB @ 1600MHz

Trädvy Permalänk
Medlem
Plats
Sollentuna
Registrerad
Sep 2002

Jag tänker inte lösa din läxa åt dig men det du tex kan göra är att skicka med en actionlistener eller actionevent som ett argument till addAButton funktionen som du sedan använder i funktionen. Sedan anropar du addAButton med tex unika listeners/actionevents för varje knapp du skapar.

Trädvy Permalänk
Medlem
Plats
Malmö
Registrerad
Jul 2013

@Pamudas:
'Funkade nu Ska se om jag kan hitta hur man gör med bilderna osv Tack så mycket för hjälpen.

Trädvy Permalänk
Medlem
Plats
Helsingborg
Registrerad
Okt 2008
Skrivet av RHA:

Jag tänker inte lösa din läxa åt dig

^^

Trädvy Permalänk
Medlem
Registrerad
Jan 2005

Använd getSource() på ditt actionevent för att hitta rätt knapp. T.ex

if(e.getSource() == startKnapp) { start(); }else if(e.getSource() == resetKnapp){ reset(); }