Olika ActionEvant till olika val (Java)

Permalänk

Olika ActionEvant till olika val (Java)

Börjar med att bifoga koden:

import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.*;

class menuBar implements ActionListener {
private JFrame frame;
private JMenuBar mainMenu;
private JMenu arkiv;
private JMenuItem val1, val2, val3, val4, val5;
private JTextArea textruta;

public menuBar() {
frame = new JFrame("Lotto");
mainMenu = new JMenuBar();
arkiv = new JMenu("Arkiv");

val1 = new JMenuItem("Clear");
val1.addActionListener(this);

val2 = new JMenuItem("Slumpa rad");
val2.addActionListener(this);

val3 = new JMenuItem("Öppna");

val4 = new JMenuItem("Spara");

val5 = new JMenuItem("Avsluta");

textruta = new JTextArea();

arkiv.add(val1);
arkiv.add(val2);
arkiv.add(val3);
arkiv.add(val4);
arkiv.addSeparator();
arkiv.add(val5);

mainMenu.add(arkiv);
frame.add(textruta);
frame.setJMenuBar(mainMenu);
frame.setSize(275, 275);
frame.setLocation(350, 125);
frame.setVisible(true);
}

public void actionPerformed(ActionEvent e) {
Random randomNr = new Random();
int tal;
for (int i = 0; i < 7; i++) {
tal = randomNr.nextInt(35);
textruta.append(tal + " ");
}
}

public static void main(String args[]) {
new menuBar();
}
}

Det jag vill kunna göra, är att ha ett ActionEvent till varje menyval, hur ska jag göra då? just nu innebär val 1 och val 2 att båda gör samma sak, nämligen slumpar fram 7 tal. Det val 1 ska göra är att rensa JTextArea.
Så hur får man ett manyval att söka sig till ett speciellt ActionEvent, så att inte alla går till samma? hur sepererar man de olika evants ifrån varandra? är det något i public void actionPerformed(ActionEvent e) som ska ändras?
Uppskattar hjälp till att kunna göra menyval 1 (clear) också. Att när 7 tal slumpats fram, så tar clear bort dessa.

Permalänk
Medlem
Skrivet av krisalp100:

Det jag vill kunna göra, är att ha ett ActionEvent till varje menyval, hur ska jag göra då? just nu innebär val 1 och val 2 att båda gör samma sak, nämligen slumpar fram 7 tal. Det val 1 ska göra är att rensa JTextArea.
Så hur får man ett manyval att söka sig till ett speciellt ActionEvent, så att inte alla går till samma? hur sepererar man de olika evants ifrån varandra? är det något i public void actionPerformed(ActionEvent e) som ska ändras?
Uppskattar hjälp till att kunna göra menyval 1 (clear) också. Att när 7 tal slumpats fram, så tar clear bort dessa.

Detta är ett sätt att göra det på, kanske inte det effektivaste men det funkar. Vi kollar helt enkelt vad knappen som blir tryckt heter och kör önskad funktion. Vill du ha separata actionPerformed funktioner måste du skapa en ny class och implementera ActionListener i den.

public void actionPerformed(ActionEvent e) { if(e.getActionCommand() == "Clear"){ textruta.setText(null); }else if(e.getActionCommand() == "Slumpa rad"){ Random randomNr = new Random(); int tal; for (int i = 0; i < 7; i++) { tal = randomNr.nextInt(35); textruta.append(tal + " "); } }else if(e.getActionCommand() == "Öppna"){ //Kod för att öppna. }else if(e.getActionCommand() == "Spara"){ //Kod för att spara. }else if(e.getActionCommand() == "Avsluta"){ System.exit(1); } }

Permalänk
Medlem

getActionCommand() returnerar en sträng så .equals() bör användas istället.

Det fungerar (gissar jag) även att jämföra objekt mot objekt. Detta kan även vara aningen säkrare om man inte har satt något fast namn på knappen.

class Whatever { JButton button1; JButton button2; JButton button3; ... public void actionPerformed(ActionEvent e) { if (e.getSource() instanceof JButton) { JButton source = (JButton) e.getSource(); if (source == button1) { // ... första knappen } else if (source == button2) { // ... osv } }

Visa signatur

Kom-pa-TI-bilitet

Permalänk

Min kod ser nu ut såhär:

import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.*;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStreamReader;

class menuBar implements ActionListener {
private JFrame frame;
private JMenuBar mainMenu;
private JMenu arkiv;
private JMenuItem val1, val2, val3, val4, val5;
private JTextArea textruta;

public menuBar() {
frame = new JFrame("Lotto");
mainMenu = new JMenuBar();
arkiv = new JMenu("Arkiv");

val1 = new JMenuItem("Clear");
val1.addActionListener(this);

val2 = new JMenuItem("Slumpa rad");
val2.addActionListener(this);

val3 = new JMenuItem("Öppna");

val4 = new JMenuItem("Spara");
val4.addActionListener(this);

val5 = new JMenuItem("Avsluta");

textruta = new JTextArea();

arkiv.add(val1);
arkiv.add(val2);
arkiv.add(val3);
arkiv.add(val4);
arkiv.addSeparator();
arkiv.add(val5);

mainMenu.add(arkiv);
frame.add(textruta);
frame.setJMenuBar(mainMenu);
frame.setSize(275, 275);
frame.setLocation(350, 125);
frame.setVisible(true);
}

public void actionPerformed(ActionEvent e) {

if(e.getActionCommand() == "Clear"){
textruta.setText(null);

}else if(e.getActionCommand() == "Slumpa rad"){
Random randomNr = new Random();

int tal;
for (int i = 0; i < 7; i++) {
tal = randomNr.nextInt(35);
textruta.append(tal + " ");
}

}else if(e.getActionCommand() == "Öppna"){

//Kod för att öppna.

}else if(e.getActionCommand() == "Spara"){

//Kod för att spara.

}else if(e.getActionCommand() == "Avsluta"){
System.exit(1); //TODO: Funkar inte!
}

}

public static void main(String args[]) {
new menuBar();
}
}

Min fråga är nu, hur gör jag för att kunna spara det som skrivits i JTextArea samt öppna det som sparats?

Permalänk
Medlem

Du ska inte jämföra strängar med ==, använd .equals("din sträng här") istället om du vill använda den metoden.

För att spara det som skrivits använder du förslagsvis FileWriter och kanske en BufferedReader för att läsa.

Visa signatur

Kom-pa-TI-bilitet