Hjälp med programmering i java

Permalänk
Inaktiv

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();

}
});
}
}

Permalänk
Medlem
Skrivet av anon223880:

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); } } });

Visa signatur

NZXT H510 Flow MSI B450 Tomahawk MAX
AMD Ryzen 5800X3D RX 7900XTX Kingston Fury 64GB

Permalänk
Inaktiv

@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

Permalänk
Medlem

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(); } }); } }

Visa signatur

NZXT H510 Flow MSI B450 Tomahawk MAX
AMD Ryzen 5800X3D RX 7900XTX Kingston Fury 64GB

Permalänk
Inaktiv

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

Permalänk
Medlem
Skrivet av anon223880:

@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.

Visa signatur

NZXT H510 Flow MSI B450 Tomahawk MAX
AMD Ryzen 5800X3D RX 7900XTX Kingston Fury 64GB

Permalänk
Medlem

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.

Permalänk
Inaktiv

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

Permalänk
Medlem
Skrivet av RHA:

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

^^

Permalänk
Medlem

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(); }