2016-11-01 1 views
-1
übertragen

Ok so in meinem Code frage ich den Benutzer nach ihrem Namen und bitten sie, auf eine der 3 Schaltflächen klicken, die eine Variable einen entsprechenden Wert gibt . Jetzt möchte ich in einem anderen Programm dieses Programm aufrufen und dann die Zeichenkette anzeigen und den int-Wert für einen bestimmten Zweck verwenden.Wie kann ich Werte von einem int und String von einem Programm zu einem anderen in Java

public class MainMenuofgame extends JFrame implements ActionListener{ 
    JButton slow, medium, fast; 
    JLabel pic1, pic2, pic3, pic4; 
    JTextField username; 
    Container frame; 

    static String name; 
    static int xspeed = 0;   

    public MainMenuofgame() { 
      super ("Main Menu of Rocket Launch"); 
      frame = getContentPane(); 
      frame.setLayout (null); 

      pic1 = new JLabel (new ImageIcon ("welcome.png")); 

      pic2 = new JLabel (new ImageIcon ("name.png")); 

      pic3 = new JLabel (new ImageIcon ("speed.png")); 

      pic4 = new JLabel (new ImageIcon ("backgnd.jpg")); 

      username = new JTextField(); 

      slow = new JButton("Slow"); 
      // slow.setActionCommand("slowspeed"); 
      slow.addActionListener (this); 

      medium = new JButton("Medium"); 
      // medium.setActionCommand("mediumspeed"); 
      medium.addActionListener (this); 

      fast = new JButton("Fast"); 
      // fast.setActionCommand("fastspeed"); 
      fast.addActionListener (this); 

      pic1.setBounds (30,50, 525, 173);//welcome 
      pic2.setBounds (100,230,212,73);//name 
      pic3.setBounds (80,350,428,84);//speed 

      username.setBounds(310,255,150,30); 

      slow.setBounds (100,450,100,100); 
      medium.setBounds (250,450,100,100); 
      fast.setBounds (400,450,100,100); 
      //background bound goes in the end 
      pic4.setBounds (0,0, 600,900); 

      frame.add (pic1); 

      frame.add (pic2); 

      frame.add (pic3); 

      frame.add (username); 

      frame.add (slow); 

      frame.add (medium); 

      frame.add (fast);  

      frame.add (pic4); 


      setSize(600, 900); 
      setVisible (true); 
      setDefaultCloseOperation (EXIT_ON_CLOSE); 

    } 

    public void actionPerformed (ActionEvent evt){ 

      String name = username.getText(); 

      if (evt.getSource() == slow) 
      { 
        xspeed = 1; 
      } 
      else if(evt.getSource() == medium) 
      { 
        xspeed = 5; 
      } 
      else 
      { 
        xspeed = 10; 
      } 

    } 



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

} 
+0

speichern es im ersten Programm-Datei, dann lesen Sie die Datei in der Zweite? – Carcigenicate

+0

könnten Sie ein Beispiel erklären? @Carcigenicate – Excali

+0

Sie haben eine Nummer, die Sie zwischen Programmen übertragen möchten? Schreiben Sie die Nummer in eine Datei im ersten Programm, dann bin ich das zweite Programm, lesen Sie die Datei, die Sie gerade gespeichert haben. Ich bin auf meinem Telefon, also kann ich nicht wirklich ein Beispiel geben. – Carcigenicate

Antwort

0

Um ... wirklich alles, was ich brauchte, war zu tun Anruf auf meiner Variable, die ich wollte in meine Daten speichern und dann gut ... lagern. Dies geschieht in der If-Anweisung unten.Vielen Dank an alle für die Hilfe, aber ehrlich gesagt die meisten Ihrer Antworten rised mehr Fragen als beantwortet meine und verwirrt mich nur, aber ich dachte, es aus so dank sowieso :)

public class MainMenuofgame extends JFrame implements ActionListener{ 
    JButton slow, medium, fast; 
    JLabel pic1, pic2, pic3, pic4; 
    JTextField username; 
    Container frame; 

    static String name; 
    static int xspeed = 0;   

    public MainMenuofgame() { 
      super ("Main Menu of Rocket Launch"); 
      frame = getContentPane(); 
      frame.setLayout (null); 

      pic1 = new JLabel (new ImageIcon ("welcome.png")); 

      pic2 = new JLabel (new ImageIcon ("name.png")); 

      pic3 = new JLabel (new ImageIcon ("speed.png")); 

      pic4 = new JLabel (new ImageIcon ("backgnd.jpg")); 

      username = new JTextField(); 

      slow = new JButton("Slow"); 
      // slow.setActionCommand("slowspeed"); 
      slow.addActionListener (this); 

      medium = new JButton("Medium"); 
      // medium.setActionCommand("mediumspeed"); 
      medium.addActionListener (this); 

      fast = new JButton("Fast"); 
      // fast.setActionCommand("fastspeed"); 
      fast.addActionListener (this); 

      pic1.setBounds (30,50, 525, 173);//welcome 
      pic2.setBounds (100,230,212,73);//name 
      pic3.setBounds (80,350,428,84);//speed 

      username.setBounds(310,255,150,30); 

      slow.setBounds (100,450,100,100); 
      medium.setBounds (250,450,100,100); 
      fast.setBounds (400,450,100,100); 
      //background bound goes in the end 
      pic4.setBounds (0,0, 600,900); 

      frame.add (pic1); 

      frame.add (pic2); 

      frame.add (pic3); 

      frame.add (username); 

      frame.add (slow); 

      frame.add (medium); 

      frame.add (fast);  

      frame.add (pic4); 


      setSize(600, 900); 
      setVisible (true); 
      setDefaultCloseOperation (EXIT_ON_CLOSE); 

    } 

    public void actionPerformed (ActionEvent evt){ 

      String name = username.getText(); 
      Rocketlaunch.name = name; 

      if (evt.getSource() == slow) 
      { 
        Rocketlaunch.moveSpeed = 1; 
        Rocketlaunch.speed = "Slow"; 
        setVisible (false); 
      } 
      else if(evt.getSource() == medium) 
      { 
        Rocketlaunch.moveSpeed = 5; 
        Rocketlaunch.speed = "Medium"; 
        setVisible (false); 
      } 
      else 
      { 
        Rocketlaunch.moveSpeed = 10; 
        Rocketlaunch.speed = "Fast"; 
        setVisible (false); 
      } 

      new Rocketlaunch(); 

    } 



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

} 
0

Es gibt eine von zwei Arten, die auf den Sinn kommen, wie Informationen von einem Programm zum anderen übertragen ...

  1. Client-Server-Anwendungen

Dies erfordert, dass Sie auf eine dritte Anwendung ausführen, die Informationen von jedem der anderen zwei Anwendungen (Clients) über einen Socket akzeptiert. Weitere Informationen Google „Client-Server-Anwendungen in Java“

  1. Haben Sie eine Textdatei Weitergabe von Informationen

Um dies zu tun, sollten Sie eine Textdatei haben, dass eine Anwendung speichert Informationen in und die andere Anwendung liest es einfach einfach ... Dies ist eine einfachere Lösung, aber weniger eine Lernerfahrung. Hier ist ein Beispielcode.

Anwendung 1:

private void storeMessage(String msg){ 
    File centralFile = new File("path to your file"); 
    BufferedWriter writer = new BufferedWriter(new FileWriter(centralFile)); 
    writer.write(msg); 
    writer.close(); 
} 

Anwendung 2:

private String getMessage(){ 
    File centralFile = new File("path to your file"); 
    String msg = ""; 
    BufferedReader reader = new BufferedReader(new FileReader(centralFile)); 
    while (reader.hasNextLine()){ 
     msg += reader.nextLine(); 
    } 
    reader.close(); 
    return msg; 
} 

this helps

+0

um jetzt bin ich nur für die einfache, weil ich kurz auf die Zeit, aber wissen Sie, wie es heißt, Daten in einer Textdatei zu speichern und Daten aus einer Textdatei zu lesen, so dass ich erforschen kann, wie @paul zu tun – Excali

+0

@Excali hier ist ein Beispielcode – paul

+0

Wenn Sie immer noch nicht verstehen, Suche "wie in eine Textdatei in Java schreiben" und "wie Text aus einer Datei in Java zu lesen" – paul

1

Das Verhalten, das Sie beschreiben, ist in der Tat nicht die „Transferwerte eines int und String von einem Programm zum anderen in Java ", sondern viel einfacher die Übertragung von Daten von einem Objekt zum anderen, hier sind die Objekte dargestellt durch GUI-Komponenten. Erstellen Sie nicht zwei separate Programme, sondern erstellen Sie separate Objekte, die auf sinnvolle Weise interagieren. Das ist die Essenz von OOPs mit Java. Die einfachste Lösung besteht darin, dass die Hauptanwendung die GUI der Unteranwendung in einem modalen Dialog wie einem modalen JDialog anzeigt, und nachdem das Dialogfeld behandelt wurde (dh nicht mehr sichtbar ist), fragt das Hauptprogramm/Objekt danach ab Dialog für den Zustand seiner Komponenten - die Daten, die eingegeben wurden.

Auch Sie malt sich in einer Ecke, indem Sie Ihre Klasse JFrame erweitern, zwingen Sie JFrames zu erstellen und anzuzeigen, wenn oft mehr Flexibilität erforderlich ist. In der Tat würde ich wagen, dass die meisten der Swing GUI-Code, den ich erstellt habe und den ich gesehen habe, nicht JFrame zu erweitern, und in der Tat ist es selten, dass Sie jemals dies tun möchten. Häufiger sind Ihre GUI-Klassen darauf ausgerichtet, JPanels zu erstellen, die dann in JFrames oder JDialogs oder JTabbedPanes eingefügt oder über CardLayouts ausgetauscht werden können, wo immer dies erforderlich ist. Dies erhöht die Flexibilität Ihrer GUI-Codierung erheblich.

Zum Beispiel:

import java.awt.Component; 
import java.awt.Dialog.ModalityType; 
import java.awt.Dimension; 
import java.awt.Window; 
import java.awt.event.ActionEvent; 

import javax.swing.*; 

@SuppressWarnings("serial") 
public class MenuDemoMainPanel extends JPanel { 
    private MenuPanel menuPanel = new MenuPanel(); 
    private JDialog menuDialog = null; 
    private String name; 
    private Speed speed; 
    private JTextField nameField = new JTextField(10); 
    private JTextField speedField = new JTextField(10); 

    public MenuDemoMainPanel() { 

     // these fields are for display only and should not allow user 
     // interaction 
     nameField.setFocusable(false); 
     speedField.setFocusable(false); 

     // not kosher to set this directly, per kleopatra, but oh well 
     setPreferredSize(new Dimension(600, 400)); 

     // simple demo GUI -- add components 
     add(new JLabel("Name:")); 
     add(nameField); 
     add(new JLabel("Speed:")); 
     add(speedField); 
     add(new JButton(new GetNameAndSpeedAction("Get Name And Speed"))); 
    } 

    // action for JButton that displays the menuDialog JDialog 
    private class GetNameAndSpeedAction extends AbstractAction { 
     public GetNameAndSpeedAction(String name) { 
      super(name); 
      int mnemonic = (int) name.charAt(0); 
      putValue(MNEMONIC_KEY, mnemonic); 
     } 

     @Override 
     public void actionPerformed(ActionEvent e) { 
      if (menuDialog == null) { 
       // if the menu dialog has not been created yet -- create it 
       Window win = SwingUtilities.getWindowAncestor(MenuDemoMainPanel.this); 
       menuDialog = new JDialog(win, "Menu", ModalityType.APPLICATION_MODAL); 
       menuDialog.add(menuPanel); 
       menuDialog.pack(); 
       menuDialog.setLocationRelativeTo(win); 
      } 

      // display the menu JDialog 
      menuDialog.setVisible(true); 

      // this code is called only when the dialog is no longer visible 
      // query the dialog for the state it holds 
      name = menuPanel.getNameText(); 
      speed = menuPanel.getSpeed(); 

      // and display the state in the main GUI 
      if (name != null && speed != null) { 
       nameField.setText(name); 
       speedField.setText(speed.getText()); 
      } 

     } 
    } 

    private static void createAndShowGui() { 
     // create the main GUI JPanel 
     MenuDemoMainPanel mainPanel = new MenuDemoMainPanel(); 

     // then create an application GUI 
     JFrame frame = new JFrame("Menu Demo -- Main GUI"); 
     frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); 
     frame.getContentPane().add(mainPanel); // place the main panel into the GUI 

     // and pack and display it: 
     frame.pack(); 
     frame.setLocationByPlatform(true); 
     frame.setVisible(true); 
    } 

    public static void main(String[] args) { 
     SwingUtilities.invokeLater(() -> createAndShowGui()); 
    } 
} 

// JPanel to hold menu dialog components 
@SuppressWarnings("serial") 
class MenuPanel extends JPanel { 
    private JComboBox<Speed> speedCombo = new JComboBox<>(Speed.values()); 
    private JTextField nameField = new JTextField(10); 

    public MenuPanel() { 
     speedCombo.setSelectedIndex(-1); 
     add(new JLabel("Name:")); 
     add(nameField); 
     add(new JLabel("Speed:")); 
     add(speedCombo); 
     add(new JButton(new SubmitAction("Submit"))); 
    } 

    // allow outside classes to query the nameField JTextField's state 
    public String getNameText() { 
     return nameField.getText(); 
    } 

    // allow outside classes to query the speedCombo JComboBox's state 
    public Speed getSpeed() { 
     return (Speed) speedCombo.getSelectedItem(); 
    } 

    // Action for JButton that submits the dialog to the main GUI 
    private class SubmitAction extends AbstractAction { 

     public SubmitAction(String name) { 
      super(name); 
      int mnemonic = (int) name.charAt(0); 
      putValue(MNEMONIC_KEY, mnemonic); 
     } 

     @Override 
     public void actionPerformed(ActionEvent arg0) { 
      // if the data is not all entered or selected 
      if (nameField.getText().trim().isEmpty() || speedCombo.getSelectedIndex() == -1) { 
       Component comp = MenuPanel.this; 
       String msg = "You must enter your name and select a speed"; 
       String title = "Invalid Data"; 
       int msgType = JOptionPane.ERROR_MESSAGE; 
       // warn the user and leave this dialog still visible 
       JOptionPane.showMessageDialog(comp, msg, title, msgType); 
      } else { 

       // otherwise dispose of this dialog and thereby pass control 
       // back to the main application/GUI 
       Window win = SwingUtilities.getWindowAncestor(MenuPanel.this); 
       win.dispose(); 
      } 
     } 

    } 
} 

// an enum to encapsulate possible game speeds 
enum Speed { 
    SLOW("Slow"), MEDIUM("Medium"), FAST("Fast"); 
    private String text; 

    private Speed(String text) { 
     this.text = text; 
    } 

    public String getText() { 
     return text; 
    } 

    @Override 
    public String toString() { 
     return getText(); 
    } 
} 
+0

um Ich fand einen einfacheren Weg, dies zu tun, und ich stelle es als eine Antwort, können Sie es bitte betrachten und vielleicht eine Art von Feedback geben? – Excali

Verwandte Themen