我如何在Java中写入文本文件

时间:2019-12-08 16:52:20

标签: java

所以我有两个类,一个用于登录,另一个用于主页。我将发布以下两个代码: 登录名:

package Interfata;

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);
        }
    });
    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) {
            butonCancelActionPerformed(evt);
        }
    });
    panelLogin.add(butonCancel);

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

private void butonLoginActionPerformed(java.awt.event.ActionEvent evt) {                                            
    String uname=usernameField.getText();
    String pword=parolaField.getText();
    if(uname.equals("admin") && pword.equals("admin")){
        Home ob=new Home();
        ob.setVisible(true);
        this.dispose();
    }
    else{
        JFrame rootPane = null;
        JOptionPane.showMessageDialog(rootPane, "Username sau parola incorecte","Eroare la conectare",JOptionPane.WARNING_MESSAGE);
    }
}
private void butonCancelActionPerformed(java.awt.event.ActionEvent evt) {                                            
    System.exit(0);
}

private static void Login() {

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

public static void main(String[] args) {

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

        }
    });
}

}

和家:

package Interfata;

import java.awt.BorderLayout;
import java.awt.Color;
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 denumireField,pretField,cantitateField,cantitateDoritaField;

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,75, 75,100);
    list.setSelectionBackground(Color.ORANGE);
    panelHome.add(list);  

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

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

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

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

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

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

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


    //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=cantitateDoritaField.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);

    //Cumpurile denumire cantitate si pret pt adaugarea plantei
    //denumireField
    denumireField = new JTextField();
    denumireField.setBounds(80,240,100,20);
    denumireField.setHorizontalAlignment(JTextField.CENTER);

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

    //cantitateField
    cantitateField = new JTextField();
    cantitateField.setBounds(80,260,100,20);
    cantitateField.setHorizontalAlignment(JTextField.CENTER);

    //placeholder pt cantitateField
    final String placeholderCantitate = "Cantitatea";
    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);

    //pretField
    pretField = new JTextField();
    pretField.setBounds(80,280,100,20);
    pretField.setHorizontalAlignment(JTextField.CENTER);

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

    //Butonul de adaugare a unei plantei noi
    butonAdauga = new JButton("Adauga");
    butonAdauga.setLocation(180, 260);
    butonAdauga.setSize(100, 20);
    butonAdauga.addActionListener(new ActionListener() {
        public void actionPerformed(java.awt.event.ActionEvent evt) {
            String denumireNou=denumireField.getText();
            String cantitateNou=cantitateField.getText();
            String pretNou=pretField.getText();

            listaplante[kPlante++]=denumireNou;
            listacantitati[kCantitati++]=cantitateNou;
            listapreturi[kPreturi++]=pretNou;
            panelHome.setVisible(false);
            panelHome.setVisible(true);
        }
    });
    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 Home() {

    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, 350);
    frameHome.setVisible(true);
}

public static void main(String[] args) {
    //Creez GUI si il afisez pe ecran
    /*try {
        for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
            if ("Nimbus".equals(info.getName())) {
                javax.swing.UIManager.setLookAndFeel(info.getClassName());
                break;
            }
        }
    } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | javax.swing.UnsupportedLookAndFeelException ex) {
        java.util.logging.Logger.getLogger(Home.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
    }*/
    SwingUtilities.invokeLater(new Runnable() {
        public void run() {
            Home();
        }
    });
}

}

我有3个列表,我在其中存储一些数据,我想为每个一个滚动窗格实现,但是我尝试了很多事情,但我做不到,我想这是因为没有布局,但是我不想要现在就改变它。空布局和绝对布局是一回事吗?

当我想按下登录按钮并创建一个Home类型的对象时,它会弹出另一个页面,而不是我的HOMEPAGE,而且我不明白为什么

最后一件事,在按下按钮停止刷新我正在写入内容的文本文件后,该怎么办?

1 个答案:

答案 0 :(得分:0)

  • 要解决第一个问题,您需要设置某种布局
  • 我认为您的主页弹出另一个页面,因为您创建了JFrame和从JFrame扩展的主页。您不需要创建JFrame,而只需创建Home。
  • 关于第三个问题,我不太了解您想要什么。