所以我正在做一个基于医疗商店的学校项目(关于植物)。我有两个类(每个都有一个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登录时,无法切换帧。它向我展示了另一个新框架,而不是我的家庭框架。为什么?我做错了什么?另一个问题是:如果我购买一棵植物,我会将买方购买的名称和金额写到文本文件中,但是如果我购买另一棵植物,则文件将被重写,并且我想拥有在那里购买的所有植物。有任何类型吗?
为什么要首先使用两个框架?
仅使用单个主JFrame。
将其布局设置为CardLayout
通过扩展JPanel创建登录名和主页。
将它们放置在主机中,并根据需要显示“登录”或“主页”面板!