如何切换Java框架?

问题描述 投票:0回答:1

所以我正在做一个基于医疗商店的学校项目(关于植物)。我有两个类(每个都有一个JFrame)。

登录:

import javax.swing.*;  
import java.awt.event.ActionListener;
import java.awt.event.FocusEvent;
import java.awt.event.FocusListener;
import javax.swing.JOptionPane;

public class Login extends JFrame{
JPanel panelLogin;
JTextField usernameField;
JPasswordField parolaField;
JButton butonLogin,butonCancel;

public JPanel createContentPane (){

    //Creez un panel pe care sa pun toate campurile.
    panelLogin = new JPanel();
    panelLogin.setLayout(null);
    panelLogin.setBackground(new java.awt.Color(204, 204, 255));
    panelLogin.setBorder(javax.swing.BorderFactory.createTitledBorder("Login"));

    //usernameField
    usernameField = new JTextField();
    usernameField.setLocation(50, 50);
    usernameField.setSize(300, 25);
    usernameField.setHorizontalAlignment(JTextField.CENTER);

    //placeholder pt usernameField
    final String placeholderUsername = "Username";
    usernameField.setText(placeholderUsername);    
    usernameField.addFocusListener(new FocusListener() {
private boolean showingPlaceholder = true;
        public void focusGained(FocusEvent e) {
                if (showingPlaceholder) {
                        showingPlaceholder = false;
                        usernameField.setText("");
                }
        }
        public void focusLost(FocusEvent arg0) {
                if (usernameField.getText().isEmpty()) {
                        usernameField.setText(placeholderUsername);
                        showingPlaceholder = true;
                }
        }
    });
    panelLogin.add(usernameField);

    //parolaField
    parolaField = new JPasswordField();
    parolaField.setLocation(50, 100);
    parolaField.setSize(300, 25);
    parolaField.setHorizontalAlignment(JTextField.CENTER);

    //placeholder pt parolaField
    final String placeholderParola = "Parola";
    parolaField.setText(placeholderParola);    
    parolaField.addFocusListener(new FocusListener() {
private boolean showingPlaceholder = true;
        public void focusGained(FocusEvent e) {
                if (showingPlaceholder) {
                        showingPlaceholder = false;
                        parolaField.setText("");
                }
        }
        public void focusLost(FocusEvent arg0) {
                if (parolaField.getText().isEmpty()) {
                        parolaField.setText(placeholderParola);
                        showingPlaceholder = true;
                }
        }
    });       
    panelLogin.add(parolaField);

    //butonLogin
    butonLogin = new JButton("Login");
    butonLogin.setLocation(70, 140);
    butonLogin.setSize(100, 20);
    butonLogin.addActionListener(new ActionListener() {
        public void actionPerformed(java.awt.event.ActionEvent evt) {
            butonLoginActionPerformed(evt);
            /*
            String uname=usernameField.getText();
            String pword=parolaField.getText();
            if(uname.equals("admin") && pword.equals("admin")){
                Home home=new Home();
                home.setVisible(true); 
                //this.dispose();
            }
            else{
            JFrame rootPane = null;
            JOptionPane.showMessageDialog(rootPane, "Username sau parola incorecte","Eroare la conectare",JOptionPane.WARNING_MESSAGE);
            }*/
        }
    });
    panelLogin.add(butonLogin);

    //butonCancel
    butonCancel = new JButton("Cancel");
    butonCancel.setLocation(220, 140);
    butonCancel.setSize(100, 20);
    butonCancel.addActionListener(new ActionListener() {
        public void actionPerformed(java.awt.event.ActionEvent evt) {
            System.exit(0);
        }
    });
    panelLogin.add(butonCancel);

    //Returnez panelul
    panelLogin.setOpaque(true);
    return panelLogin;
}

private static void LoginGUI() {

    JFrame frameLogin = new JFrame("PLAFAR * Calinescu George-Catalin * 221");

    //Creez panelul peste frame si il stilizez
    Login login = new Login();
    frameLogin.setContentPane(login.createContentPane()); 
    frameLogin.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frameLogin.setSize(400, 250);
    frameLogin.setVisible(true);
}
private void butonLoginActionPerformed(java.awt.event.ActionEvent evt) {                                            
    String uname=usernameField.getText();
            String pword=parolaField.getText();
            if(uname.equals("admin") && pword.equals("admin")){
                Home ho=new Home();
                ho.setVisible(true);
                this.dispose();
            }
            else{
                JFrame rootPane = null;
                JOptionPane.showMessageDialog(rootPane, "Username sau parola incorecte","Eroare la conectare",JOptionPane.WARNING_MESSAGE);
            }
}
public static void main(String[] args) {

    //Creez GUI si il afisez pe ecran
    SwingUtilities.invokeLater(new Runnable() {
        public void run() {
            LoginGUI();
        }
    });
}

}和首页:

import java.awt.event.ActionListener;
import java.awt.event.FocusEvent;
import java.awt.event.FocusListener;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.*;  
import javax.swing.DefaultListModel;
import javax.swing.JFrame;
import javax.swing.JList;
import javax.swing.SwingUtilities;

public class Home extends JFrame{
JPanel panelHome;
static String[] listaplante=new String[10];
static String[] listacantitati=new String[10];
static String[] listapreturi=new String[10];
static int kPlante=0, kCantitati=0, kPreturi=0;
JButton butonCumpara,butonAdauga;
JTextField cantitateField;


public JPanel createHomeContentPane (){

    //Creez un panel pe care sa pun toate campurile.
    panelHome = new JPanel();
    panelHome.setLayout(null);
    panelHome.setBackground(new java.awt.Color(204, 204, 255));
    panelHome.setBorder(javax.swing.BorderFactory.createTitledBorder("Home"));

    //Creez lista cu plante
    DefaultListModel<String> listaPlante = new DefaultListModel<>();  
    JList<String> list = new JList<>(citirePlante());  
    list.setBounds(50,100, 75,75); 
    panelHome.add(list);  

    //Creez lista cu cantitatile fiecarei plante
    DefaultListModel<String> listaCantitati = new DefaultListModel<>();  
    JList<String> list2 = new JList<>(citireCantitati());  
    list2.setBounds(150,100, 75,75); 
    panelHome.add(list2); 

    //Creez lista cu preturile fiecarei plante
    DefaultListModel<String> listaPreturi = new DefaultListModel<>();  
    JList<String> list3 = new JList<>(citirePreturi());  
    list3.setBounds(250,100, 75,75); 
    panelHome.add(list3); 

    //Creez titlurile pt fiecare lista
    JLabel denumireLabel=new JLabel("Denumire:");
    denumireLabel.setBounds(50,80,70,20);
    panelHome.add(denumireLabel);

    JLabel cantitatiLabel=new JLabel("Cantitati:");
    cantitatiLabel.setBounds(150,80,70,20);
    panelHome.add(cantitatiLabel);

    JLabel preturiLabel=new JLabel("Preturi:");
    preturiLabel.setBounds(250,80,70,20);
    panelHome.add(preturiLabel);

    //Creez un camp pt a adauga cantitatea dorita care urmeaza a fi cumparata
    //cantitateField
    cantitateField = new JTextField();
    cantitateField.setBounds(180,180,100,20);
    cantitateField.setHorizontalAlignment(JTextField.CENTER);

    //placeholder pt cantitateField
    final String placeholderCantitate = "Cantitatea dorita";
    cantitateField.setText(placeholderCantitate);    
    cantitateField.addFocusListener(new FocusListener() {
private boolean showingPlaceholder = true;
        public void focusGained(FocusEvent e) {
                if (showingPlaceholder) {
                        showingPlaceholder = false;
                        cantitateField.setText("");
                }
        }
        public void focusLost(FocusEvent arg0) {
                if (cantitateField.getText().isEmpty()) {
                        cantitateField.setText(placeholderCantitate);
                        showingPlaceholder = true;
                }
        }
    });
    panelHome.add(cantitateField);


    //Butonul de cumparare
    butonCumpara = new JButton("Cumpara");
    butonCumpara.setLocation(180, 200);
    butonCumpara.setSize(100, 20);
    butonCumpara.addActionListener(new ActionListener() {
        public void actionPerformed(java.awt.event.ActionEvent evt) {
            String plantaselectata = list.getSelectedValue();
            int indexplanta=list.getSelectedIndex();
            String cantitateselectata = list2.getSelectedValue();
            int indexcantitate=list2.getSelectedIndex();
            String pretselectat = list3.getSelectedValue();
            int indexpret=list3.getSelectedIndex();
            String cantitatedorita=cantitateField.getText();

            int valCantitate=Integer.valueOf(cantitateselectata);
            int valCantitateDorita=Integer.valueOf(cantitatedorita);
            int valPret=Integer.valueOf(pretselectat);

            if(indexplanta==indexcantitate && indexplanta==indexpret){
                if(valCantitateDorita<=valCantitate){
                    try {
                        afisPlantaCumparata(plantaselectata,valCantitateDorita);
                    } catch (IOException ex) {
                        Logger.getLogger(Home.class.getName()).log(Level.SEVERE, null, ex);
                    }
                    int a=valCantitate-valCantitateDorita;
                    String b=Integer.toString(a);
                    listacantitati[indexcantitate]=b;
                    panelHome.setVisible(false);
                    panelHome.setVisible(true);
                }
                else{
                    JFrame rootPane = null;
                    JOptionPane.showMessageDialog(rootPane, "Cantitatea nu esti disponibila","Eroare de cumparare",JOptionPane.WARNING_MESSAGE);
                }
            }
            else{
                JFrame rootPane = null;
                JOptionPane.showMessageDialog(rootPane, "Planta, cantitate si pretul nu sunt din aceeasi categorie","Eroare de cumparare",JOptionPane.WARNING_MESSAGE);
            }

        }
    });
    panelHome.add(butonCumpara);

    //Butonul de adaugare a unei plantei noi
    butonAdauga = new JButton("Adauga");
    butonAdauga.setLocation(80, 200);
    butonAdauga.setSize(100, 20);
    butonAdauga.addActionListener(new ActionListener() {
        public void actionPerformed(java.awt.event.ActionEvent evt) {
            System.out.println("DsA");
        }
    });
    panelHome.add(butonAdauga);

    //Returnez panelul
    panelHome.setOpaque(true);
    return panelHome;
}

public static String[] citirePlante(){
    BufferedReader objReader = null;
    try {
        String strCurrentLine;
        objReader = new BufferedReader(new FileReader("Plante.txt"));
        while ((strCurrentLine = objReader.readLine()) != null) {
            listaplante[kPlante] = strCurrentLine;
            kPlante++;
        }
    } catch (IOException e) {
        e.printStackTrace();
    } finally {
        try {
            if (objReader != null)
            objReader.close();
        }catch (IOException ex) {
            ex.printStackTrace();
        }
    }
    return listaplante;
}

public static String[] citireCantitati(){
    BufferedReader objReader = null;
    try {
        String strCurrentLine;
        objReader = new BufferedReader(new FileReader("Cantitati.txt"));
        while ((strCurrentLine = objReader.readLine()) != null) {
            listacantitati[kCantitati] = strCurrentLine;
            kCantitati++;
        }
    } catch (IOException e) {
        e.printStackTrace();
    } finally {
        try {
            if (objReader != null)
            objReader.close();
        }catch (IOException ex) {
            ex.printStackTrace();
        }
    }
    return listacantitati;
}

public static String[] citirePreturi(){
    BufferedReader objReader = null;
    try {
        String strCurrentLine;
        objReader = new BufferedReader(new FileReader("Preturi.txt"));
        while ((strCurrentLine = objReader.readLine()) != null) {
            listapreturi[kPreturi] = strCurrentLine;
            kPreturi++;
        }
    } catch (IOException e) {
        e.printStackTrace();
    } finally {
        try {
            if (objReader != null)
            objReader.close();
        }catch (IOException ex) {
            ex.printStackTrace();
        }
    }
    return listapreturi;
}

public static void afisPlantaCumparata(String p, int c) throws IOException{
FileWriter writer = new FileWriter("PlanteVandute.txt");
 try (

         BufferedWriter bw = new BufferedWriter(writer)) {

        bw.write(p+" "+c+"\n");

    } catch (IOException e) {
        System.err.format("IOException: %s%n", e);
    }

}

private static void HomeGUI() {

    JFrame frameHome = new JFrame("PLAFAR * Calinescu George-Catalin * 221");

    //Creez panelul peste frame si il stilizez
    Home home = new Home();
    frameHome.setContentPane(home.createHomeContentPane()); 
    frameHome.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frameHome.setSize(400, 300);
    frameHome.setVisible(true);
}

public static void main(String[] args) {
    //Creez GUI si il afisez pe ecran
    SwingUtilities.invokeLater(new Runnable() {
        public void run() {
            HomeGUI();
        }
    });
}

}

所以当我使用用户名admin和密码admin登录时,无法切换帧。它向我展示了另一个新框架,而不是我的家庭框架。为什么?我做错了什么?另一个问题是:如果我购买一棵植物,我会将买方购买的名称和金额写到文本文件中,但是如果我购买另一棵植物,则文件将被重写,并且我想拥有在那里购买的所有植物。有任何类型吗?

java
1个回答
0
投票

为什么要首先使用两个框架?

仅使用单个主JFrame。

将其布局设置为CardLayout

通过扩展JPanel创建登录名和主页。

将它们放置在主机中,并根据需要显示“登录”或“主页”面板!

learn about CardLayout here

© www.soinside.com 2019 - 2024. All rights reserved.