[英]use Java Swing worker as a singleton to backup application data in the background
[英]Use Singleton in Java Swing
我想到了使用Singleton模式这样的事情。 我不需要严肃的方法或类或任何东西。 我在这里是这样的。
private void btnVehicleActionPerformed(java.awt.event.ActionEvent evt) {}
这是jButton btnVehicle的 事件->操作-> actionPerformed 。 当我按下按钮时,将InternalFrame表单加载到jDesktopPane。 当我按下两次时,将加载两个表格。 如果我可以使用Singleton,那是加载单个Frame并将其放在前面(如果已经加载)的最佳解决方案。 我尝试过,实际上这没用,单打按钮。
Registration_Vehicles rv;
private void btnVehicleActionPerformed(java.awt.event.ActionEvent evt) {
if(rv==null){
rv = new Registration_Vehicles();
jDesktopPane2.add(rv);
}
else{
rv.toFront();
}
}
任何人都可以用单例或其他任何方法为此提供更好的解决方案。
这是一个小程序,可以选择一个现有的内部框架或创建一个新的内部框架(取决于用户指定的框架号是否已存在):
import java.awt.FlowLayout;
import java.beans.PropertyVetoException;
import javax.swing.*;
public class SingletonInSwing {
private JDesktopPane desktopPane;
private JTextField frameNumberTextField;
public static void main(final String[] arguments) {
new SingletonInSwing().launchGui();
}
private void launchGui() {
final JFrame frame = new JFrame("Stack Overflow");
frame.setBounds(100, 100, 800, 600);
frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
desktopPane = new JDesktopPane();
desktopPane.add(createControlPanel());
// Add one internal frame to get started.
addInternalFrame("1");
frame.setContentPane(desktopPane);
frame.setVisible(true);
}
private JInternalFrame createControlPanel() {
final JPanel controlPanel = new JPanel(new FlowLayout());
frameNumberTextField = new JTextField(6);
final JButton addFrameButton = new JButton("Add internal frame");
controlPanel.add(new JLabel("Frame number:"));
controlPanel.add(frameNumberTextField);
controlPanel.add(addFrameButton);
frameNumberTextField.addActionListener(actionEvent -> addInternalFrame());
addFrameButton.addActionListener(actionEvent -> addInternalFrame());
final JInternalFrame controlFrame = new JInternalFrame("Control frame");
controlFrame.add(controlPanel);
controlFrame.setBounds(10, 10, 760, 90);
controlFrame.setVisible(true);
return controlFrame;
}
private void addInternalFrame() {
addInternalFrame(frameNumberTextField.getText());
}
private void addInternalFrame(final String frameNumber) {
final String frameTitle = "test " + frameNumber;
// Search for existing frame.
JInternalFrame existingFrame = null;
for (final JInternalFrame internalFrame : desktopPane.getAllFrames()) {
if (frameTitle.equals(internalFrame.getTitle())) {
existingFrame = internalFrame;
break;
}
}
// Select existing or create new frame.
if (existingFrame != null) {
try {
existingFrame.setSelected(true);
} catch (final PropertyVetoException e) {
e.printStackTrace();
}
} else {
final int frameCount = desktopPane.getAllFrames().length;
final JInternalFrame internalFrame = new JInternalFrame(frameTitle);
internalFrame.setBounds(20 * frameCount, 110 + 40 * frameCount, 400, 200);
internalFrame.setVisible(true);
desktopPane.add(internalFrame);
internalFrame.moveToFront();
}
}
}
这里有一个关于JDesktopPane
和JInternalFrame
的不错的教程: Java教程-如何使用内部框架 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.