JFrame单例
JFrame Singleton
我在我的应用程序 classes 中实现了单例设计模式。那个 class 叫做 SearchFounisseurUi。它继承了 JFrame Swing class。我还有另一个 class,它调用 SearchFounisseurUi class。我已经编写了下面的代码,但它对我不起作用。到目前为止,这是我的代码。
package VIEW;
import CONTROLLER.SearchFournisseurController;
import MODEL.tableModel.FournisseurTableModel;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.HeadlessException;
import java.awt.ScrollPane;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
public class SearchFounisseurUi extends JFrame{
// Fields
private JTextField nomFournisseur ;
private JTable resultTable ;
// Label
private JLabel lblNomFournisseur;
private JButton chercherButton ;
// Model view controller
private FournisseurTableModel fournisseurTableModel ;
private SearchFournisseurController searchFournisseurController;
// Singleton
private static SearchFounisseurUi instance=null;
private void SearchFounisseurUi() {
initComponents();
buildFrame();
eventHandling( );
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
pack();
}
/**
* Launch the application.
*/
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
SearchFounisseurUi frame = SearchFounisseurUi.getInstance();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
private void initComponents() {
// Model
fournisseurTableModel = new FournisseurTableModel();
searchFournisseurController = new SearchFournisseurController() ;
searchFournisseurController.setModel(fournisseurTableModel);
searchFournisseurController.setUi(this);
searchFournisseurController.setData();
// View
lblNomFournisseur = new JLabel("Nom Fournisseur");
nomFournisseur = new JTextField(40);
chercherButton = new JButton("Chercher");
resultTable = new JTable(fournisseurTableModel);
}
private void eventHandling() {
}
private void buildFrame() {
setLayout(new GridBagLayout());
setPreferredSize(new Dimension(300,400));
GridBagConstraints gc = new GridBagConstraints();
// Line 1
gc.gridx = 0;
gc.gridy = 0;
gc.gridwidth = 2;
gc.weighty = 1.0;
gc.fill = GridBagConstraints.BOTH;
gc.anchor = GridBagConstraints.LINE_START;
add(new JScrollPane(resultTable),gc);
// line 2
gc.gridy++;
gc.gridwidth = 1 ;
gc.weighty = 0.01;
gc.fill = GridBagConstraints.HORIZONTAL;
add(lblNomFournisseur,gc);
gc.gridx++;
add(nomFournisseur,gc);
// line 3
gc.gridx = 0 ;
gc.gridy++ ;
add(chercherButton,gc);
}
public static SearchFounisseurUi getInstance(){
if(instance == null)
instance = new SearchFounisseurUi();
return instance;
}
}
这里是我发起 class 的地方:
btnChercherFournisseur.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent ae) {
SearchFounisseurUi fen = SearchFounisseurUi.getInstance();
}
});
在 SearchFounisseurUi
对象上调用 setVisible(true)
。
那应该可以解决您的问题。
btnChercherFournisseur.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent ae) {
SearchFounisseurUi fen = SearchFounisseurUi.getInstance();
fen.setVisible(true); /// !!! ///
}
});
构造函数没有 return 类型。所以来自
private void SearchFounisseurUi() {
改为
private SearchFounisseurUi() {
与您的 main 方法类似,在您的 getInstance 方法调用中
instance.setVisible(true);
我在我的应用程序 classes 中实现了单例设计模式。那个 class 叫做 SearchFounisseurUi。它继承了 JFrame Swing class。我还有另一个 class,它调用 SearchFounisseurUi class。我已经编写了下面的代码,但它对我不起作用。到目前为止,这是我的代码。
package VIEW;
import CONTROLLER.SearchFournisseurController;
import MODEL.tableModel.FournisseurTableModel;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.HeadlessException;
import java.awt.ScrollPane;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
public class SearchFounisseurUi extends JFrame{
// Fields
private JTextField nomFournisseur ;
private JTable resultTable ;
// Label
private JLabel lblNomFournisseur;
private JButton chercherButton ;
// Model view controller
private FournisseurTableModel fournisseurTableModel ;
private SearchFournisseurController searchFournisseurController;
// Singleton
private static SearchFounisseurUi instance=null;
private void SearchFounisseurUi() {
initComponents();
buildFrame();
eventHandling( );
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
pack();
}
/**
* Launch the application.
*/
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
SearchFounisseurUi frame = SearchFounisseurUi.getInstance();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
private void initComponents() {
// Model
fournisseurTableModel = new FournisseurTableModel();
searchFournisseurController = new SearchFournisseurController() ;
searchFournisseurController.setModel(fournisseurTableModel);
searchFournisseurController.setUi(this);
searchFournisseurController.setData();
// View
lblNomFournisseur = new JLabel("Nom Fournisseur");
nomFournisseur = new JTextField(40);
chercherButton = new JButton("Chercher");
resultTable = new JTable(fournisseurTableModel);
}
private void eventHandling() {
}
private void buildFrame() {
setLayout(new GridBagLayout());
setPreferredSize(new Dimension(300,400));
GridBagConstraints gc = new GridBagConstraints();
// Line 1
gc.gridx = 0;
gc.gridy = 0;
gc.gridwidth = 2;
gc.weighty = 1.0;
gc.fill = GridBagConstraints.BOTH;
gc.anchor = GridBagConstraints.LINE_START;
add(new JScrollPane(resultTable),gc);
// line 2
gc.gridy++;
gc.gridwidth = 1 ;
gc.weighty = 0.01;
gc.fill = GridBagConstraints.HORIZONTAL;
add(lblNomFournisseur,gc);
gc.gridx++;
add(nomFournisseur,gc);
// line 3
gc.gridx = 0 ;
gc.gridy++ ;
add(chercherButton,gc);
}
public static SearchFounisseurUi getInstance(){
if(instance == null)
instance = new SearchFounisseurUi();
return instance;
}
}
这里是我发起 class 的地方:
btnChercherFournisseur.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent ae) {
SearchFounisseurUi fen = SearchFounisseurUi.getInstance();
}
});
在 SearchFounisseurUi
对象上调用 setVisible(true)
。
那应该可以解决您的问题。
btnChercherFournisseur.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent ae) {
SearchFounisseurUi fen = SearchFounisseurUi.getInstance();
fen.setVisible(true); /// !!! ///
}
});
构造函数没有 return 类型。所以来自
private void SearchFounisseurUi() {
改为
private SearchFounisseurUi() {
与您的 main 方法类似,在您的 getInstance 方法调用中
instance.setVisible(true);