2013-11-30 5 views
0

Во-первых, я хотел бы сказать, что я искал эти форумы, а также другие ответы на мой вопрос. Я очень новичок в Java и программирую в целом. Поработав над этим несколько часов, я хотел бы попросить о помощи.Проблема с базовым графическим интерфейсом

Я пытаюсь открыть окно (которое будет иметь некоторую графику позже), которая имеет панель меню. Параметры - это 3 раскрывающиеся меню, которые выполняют задачу при выборе. Меню файла позволяет мне сохранять, загружать и выходить из программы. Пока что остальные просто печатают на экране, чтобы сообщить мне, что многое работает. Прямо сейчас, я хочу настроить его, поэтому, когда я нажимаю кнопку «Создать продавца», он откроет новое диалоговое окно с тремя полями. Я хотел бы ввести строку в один и два двухместных в двух других. Затем я буду хранить их как переменные и отправить их другой функции. Я слишком долго застрял на этой части. Имейте в виду, что, хотя до этого, вероятно, уже был дан ответ, я думаю, что я недостаточно компетентен с Java, но для того, чтобы понять ответ. Попытайтесь опустить это для меня, если это не слишком много, чтобы спросить. БЛАГОДАРЯ!

вот класс, над которым я работаю. Не стесняйтесь спрашивать меньше или больше, если вам нужно.

package seller; 

import java.awt.Dimension; 
import java.awt.GridLayout; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.JMenu; 
import javax.swing.JMenuBar; 
import javax.swing.JMenuItem; 
import javax.swing.JOptionPane; 
import javax.swing.JPanel; 
import javax.swing.JFileChooser; 
import javax.swing.JTextField; 





import datastore.Meteorite; 
import datastore.continents; 
import datastore.customers; 

import java.io.File; 
import java.util.ArrayList; 
import java.util.Scanner; 


public class BaseFrame extends JFrame implements ActionListener 
{ 
    private static final long serialVersionUID = 1L; 

    JFileChooser myChooser = new JFileChooser("."); 

    JMenuItem menuItemSave; 
    JMenuItem menuItemLoad; 
    JMenuItem menuItemExit; 
    JMenuItem menuItemCreateSeller; 
    JMenuItem menuItemUpdateSeller; 
    JMenuItem menuItemRemoveSeller; 
    JMenuItem menuItemCreateMeteorite; 
    JMenuItem menuItemUpdateMeteorite; 
    JMenuItem menuItemRemoveMeteorite; 
    JMenuItem menuItemCreateOneLine; 
    continents worldMap = new continents(); 
    boolean[][] mapArray = null; 

    int selection = 1; 
    String shopName = null; 
    Map myMap= new Map(); 
    Scanner myScanner = new Scanner(System.in); 
    Menu myMenu = new Menu(); 
    seller seller= new seller(); 
    Meteorites myMeteorite = new Meteorites(); 
    customers sellers= new customers(0,0,"test"); 
    customers buyers= new customers(0, 0, "test"); 
    ArrayList <Meteorite> myMeteorites = new ArrayList<Meteorite>(); 
    ArrayList <customers> mySellers= new ArrayList<customers>(); 
    ArrayList <customers> myBuyers= new ArrayList<customers>(); 
    customers people= new customers(0,0,"test"); 


    public void makeGui() 
    { 
     this.setTitle("Phase 3"); 

     JMenuBar mb = new JMenuBar(); 
     this.setJMenuBar(mb); 

     //Load and Save used from class example 
     JMenu fileMenu = new JMenu("File"); 
     mb.add(fileMenu); 

     menuItemSave = new JMenuItem("Save"); 
     menuItemSave.addActionListener(this); 

     menuItemLoad = new JMenuItem("Load"); 
     menuItemLoad.addActionListener(this); 

     menuItemExit = new JMenuItem("Exit"); 
     menuItemExit.addActionListener(this); 

     fileMenu.add(menuItemSave); 
     fileMenu.add(menuItemLoad); 
     fileMenu.add(menuItemExit); 


     //seller menu 

     JMenu sellerMenu = new JMenu("Seller"); 
     mb.add(sellerMenu); 

     menuItemCreateSeller = new JMenuItem("Create Seller"); 
     menuItemCreateSeller.addActionListener(this); 

     menuItemUpdateSeller = new JMenuItem("Update Seller"); 
     menuItemUpdateSeller.addActionListener(this); 

     menuItemRemoveSeller = new JMenuItem("Remove Seller"); 
     menuItemRemoveSeller.addActionListener(this); 

     sellerMenu.add(menuItemCreateSeller); 
     sellerMenu.add(menuItemUpdateSeller); 
     sellerMenu.add(menuItemRemoveSeller); 

     //handle meteorite menu 

     JMenu handleMeteoriteMenu = new JMenu("Handle Meteorite"); 
     mb.add(handleMeteoriteMenu); 

     menuItemCreateMeteorite = new JMenuItem("Create Meteorite"); 
     menuItemCreateMeteorite.addActionListener(this); 

     menuItemUpdateMeteorite = new JMenuItem("Update Meteorite"); 
     menuItemUpdateMeteorite.addActionListener(this); 

     menuItemRemoveMeteorite = new JMenuItem("Remove Meteorite"); 
     menuItemRemoveMeteorite.addActionListener(this); 

     menuItemCreateOneLine = new JMenuItem("Create Meteorite(1 line)"); 
     menuItemCreateOneLine.addActionListener(this); 

     handleMeteoriteMenu.add(menuItemCreateMeteorite); 
     handleMeteoriteMenu.add(menuItemUpdateMeteorite); 
     handleMeteoriteMenu.add(menuItemRemoveMeteorite); 
     handleMeteoriteMenu.add(menuItemCreateOneLine); 


     JPanel tPanel = new JPanel(); 
     this.add(tPanel); 
     this.pack(); 
     this.setSize(new Dimension(640,480)); 
     this.setVisible(true); 


    } 
    String myName; 
    double myLong; 
    double myLat; 
    @Override 
    public void actionPerformed(ActionEvent e) 
    { 

     Object source=null; 
     source=e.getSource(); 

     if (source == menuItemLoad) 
     { 

      mapArray = worldMap.createMap(); 

      myChooser.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES); 
      int result = myChooser.showOpenDialog(this); 

      //if user clicked Cancel button, return 
      if (result == JFileChooser.CANCEL_OPTION) 
       System.exit(1); 

      File myFile = myChooser.getSelectedFile(); //get file 

      //display error if invalid 
      if ((myFile == null) || (myFile.getName().equals(""))) 
      { 
       JOptionPane.showMessageDialog(this, "Invalid Name", "Invalid Name", JOptionPane.ERROR_MESSAGE); 
       System.exit(1); 
      } 

      myMeteorites= myMeteorite.loadMeteorite(myMeteorites, myFile); 
      sellers.loadSeller(mySellers); 
      buyers.loadBuyer(myBuyers); 

     } 

     if (source == menuItemSave) 
     { 
      mapArray = worldMap.createMap(); 

      myChooser.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES); 
      int result = myChooser.showOpenDialog(this); 

      //if user clicked Cancel button, return 
      if (result == JFileChooser.CANCEL_OPTION) 
       System.exit(1); 

      File myFile = myChooser.getSelectedFile(); //get file 

      //display error if invalid 
      if ((myFile == null) || (myFile.getName().equals(""))) 
      { 
       JOptionPane.showMessageDialog(this, "Invalid Name", "Invalid Name", JOptionPane.ERROR_MESSAGE); 
       System.exit(1); 
      } 

      myMeteorites= myMeteorite.saveMeteorite(myMeteorites, myFile); 
      sellers.saveSeller(mySellers); 
      buyers.saveBuyer(myBuyers); 

     } 

     if (source == menuItemExit) 
     { 
      System.exit(1); //exit system 
     } 

     if (source == menuItemCreateSeller) 
     { 

      JFrame myFrame = new JFrame("Create a Seller"); 
      JPanel myPanel = new JPanel(); 
      JLabel myLabel1 = new JLabel(); 
      JLabel myLabel2 = new JLabel(); 
      JLabel myLabel3 = new JLabel(); 
      final JTextField myText1 = new JTextField(30); 
      final JTextField myText2 = new JTextField(30); 
      final JTextField myText3 = new JTextField(30); 
      setDefaultCloseOperation(EXIT_ON_CLOSE); 

      myLabel1.setText("Enter Name"); 
      myLabel2.setText("Enter Longitude"); 
      myLabel3.setText("Enter Latitude"); 

      myPanel.add(myLabel1); 
      myPanel.add(myText1);  
      myPanel.add(myLabel2); 
      myPanel.add(myText2); 
      myPanel.add(myLabel3); 
      myPanel.add(myText3); 

      myFrame.add(myPanel); 
      myFrame.setSize(350,200); 
      myFrame.setVisible(true); 

      myText1.addActionListener(new ActionListener() 
      { 

       @Override 
       public void actionPerformed(ActionEvent e) 
       { 
        // TODO Auto-generated method stub 
        myName = myText1.getText(); 
       } 

      }); 

      myName = myText1.getText(); 
      //myLong = Double.parseDouble(myText2.getText()); 
      //myLat = Double.parseDouble(myText3.getText()); 


      System.out.println(myName); 
      //mySellers=people.createCust(mySellers, myLong, myLat, myName); 
      //mySellers=people.saveSeller(mySellers);  
     } 

     if (source == menuItemRemoveSeller) 
     { 
      System.out.println("remove seller"); 
     } 

     if (source == menuItemUpdateSeller) 
     { 
      System.out.println("update seller"); 
     } 

     if (source == menuItemCreateMeteorite) 
     { 
      System.out.println("create meteorite"); 
     } 

     if (source == menuItemUpdateMeteorite) 
     { 
      System.out.println("updateMeteorite"); 
     } 
     if (source == menuItemRemoveMeteorite) 
     { 
      System.out.println("remove meteorite"); 
     } 

     if (source == menuItemCreateOneLine) 
     { 
      System.out.println("create one line"); 
     } 

    } 
} 
+1

Как вы «застряли» _? Что это значит? Какая у вас проблема? –

+0

Пожалуйста, прочитайте [это] (http://docs.oracle.com/javase/tutorial/uiswing/components/dialog.html#create) и [это] (http://docs.oracle.com/javase/tutorial/uiswing/components/dialog.html # input) и сообщите нам, в какой части вы «застряли». –

+1

Я бы предложил взглянуть на [Как сделать диалоги] (http://docs.oracle.com/javase/tutorial/uiswing/components/dialog.html), [Как использовать Spinners] (http: // docs .oracle.com/javase/tutorial/uiswing/components/spinner.html) и [Как использовать форматированные текстовые поля] (http://docs.oracle.com/javase/tutorial/uiswing/components/formattedtextfield.html) – MadProgrammer

ответ

1

См. Этот пример, о чем я говорю. Хотя я бы посоветовал не использовать несколько фреймов, это будет работать на то, что вы пытаетесь сделать. Как было предложено @MadProgrammer, посмотрите на создание JDialog сек

import javax.swing.*; 
import java.awt.*; 
import java.awt.event.*; 

public class BaseFrame extends JFrame { 

    private String name; 
    private double value1; 
    private double value2; 

    private final JMenuBar jMenuBar = new JMenuBar(); 
    private final JMenu jmOpen = new JMenu("Open"); 
    JMenuItem menuItemCreateSeller = new JMenuItem("Create Seller"); 
    InnerFrame innerFrame = new InnerFrame(); 

    public BaseFrame() { 

     innerFrame.setResizable(false); 
     jmOpen.add(menuItemCreateSeller); 
     jMenuBar.add(jmOpen); 

     setJMenuBar(jMenuBar); 

     menuItemCreateSeller.addActionListener(new ActionListener(){ 
      @Override 
      public void actionPerformed(ActionEvent e) { 
       innerFrame.setVisible(true); 
      } 
     }); 

     setSize(300, 300); 
     setDefaultCloseOperation(EXIT_ON_CLOSE); 
     setLocationRelativeTo(null); 
     setVisible(true); 
    } 

    public static void main(String[] args) { 
     SwingUtilities.invokeLater(new Runnable(){ 
      @Override 
      public void run() { 
       Frame frame = new BaseFrame(); 
      } 
     }); 
    } 

    private class InnerFrame extends JFrame { 

     JPanel myPanel = new JPanel(); 
     JLabel myLabel1 = new JLabel("Enter Name"); 
     JLabel myLabel2 = new JLabel("Enter Longitude"); 
     JLabel myLabel3 = new JLabel("Enter Latitude"); 
     JLabel jlblStatus = new JLabel(" "); 
     JTextField myText1 = new JTextField(10); 
     JTextField myText2 = new JTextField(10); 
     JTextField myText3 = new JTextField(10); 

     JButton jbtPrint = new JButton("Print"); 

     public InnerFrame() { 

      myPanel.add(myLabel1); 
      myPanel.add(myText1); 
      myPanel.add(myLabel2); 
      myPanel.add(myText2); 
      myPanel.add(myLabel3); 
      myPanel.add(myText3); 

      JPanel p1 = new JPanel(new GridLayout(1,2)); 
      p1.add(jlblStatus); 
      p1.add(jbtPrint); 
      jlblStatus.setHorizontalAlignment(SwingConstants.LEFT); 
      jlblStatus.setForeground(Color.RED); 

      jbtPrint.addActionListener(new ActionListener(){ 
       @Override 
       public void actionPerformed(ActionEvent e) { 
        try { 
         name = myText1.getText(); 
         value1 = Double.parseDouble(myText2.getText()); 
         value2 = Double.parseDouble(myText3.getText()); 
         System.out.println(name); 
         double total = value1 + value2; 
         System.out.println(total); 

         setVisible(false); 
        } catch (NumberFormatException ex) { 
         jlblStatus.setText("Invalid Input"); 
        } 
       } 
      }); 

      add(myPanel, BorderLayout.CENTER); 
      add(p1, BorderLayout.SOUTH); 
      setSize(180, 220); 
      setLocationRelativeTo(null); 
      setVisible(false); 

     } 
    } 
} 
1

Вы получили хорошие советы в комментариях, а другой ответ, который был размещен разумным выглядит на первый взгляд. Я собираюсь дать объяснение, которое вам может понадобиться или не понадобиться; если вам это нужно, было бы трудно объяснить, что вам нужно, потому что это концепция, которую вы, возможно, еще не усвоили.

Программирование пользовательского интерфейса «управляется событиями»; это означает, что вместо контроля над вашим кодом, как и для неинтерактивной программы, элемент управления передается другой системе или части системы, и когда происходят определенные события, эта другая часть вызывает ваш код. «Другая часть» в этом случае - время исполнения Swing. Таким образом, ваш код связан с настройкой фреймов, панелей, макетов, текстовых полей, выпадающих списков и т. Д. И настройка прослушивателей теми вещами, которые могут вызывать события, и ожидание событий.

Если ваше замешательство связано с отсутствием понимания этого вопроса, ответ на ваш вопрос может заключаться в том, что слушатель кнопки в диалоговом окне будет считывать значения из раскрывающихся списков и/или текстовых полей - предположительно, пользователь выбрал и/или ввел значения, как он/она должен был, а затем нажал кнопку. Таким образом, запускается действие, которое срабатывает при нажатии кнопки (или клавиши ввода) (нажатие) и получает эти значения, как они есть в то время, и помещает их в переменные (или записывает их в базу данных или создает для них другой объект или независимо от того, что он должен делать.

Эта процедура также может выполнять проверку - если, например, одно из текстовых полей содержит требуемое значение, и пользователь не заполнил его, тогда эта процедура прослушивателя может обнаружите, что и вместо того, чтобы позволить программе продолжить, может появиться диалоговое окно сообщения для пользователя, сообщившего ему/ей, что не так.

Опять же, я не знаю, что это какая-то часть вашей проблемы, но я подумал, что это может быть. Это концепция, по которой у неопытных программистов интерфейса иногда возникают проблемы с d Это настолько базовое для программирования пользовательского интерфейса, что многие учебники предполагают, что вы уже знаете это.

+0

Еще одна вещь, поскольку вы, кажется, новичок в StackOverflow: если/когда ответ решает вашу проблему или отвечает на ваш вопрос, отметьте этот ответ как «принятый». Если это делается более одного, возьмите либо первое, либо, возможно, лучшее. Он побуждает людей отвечать на вопросы и, в частности, отвечать на любые другие вопросы, которые вы, в частности, могли бы иметь. – arcy

Смежные вопросы