【发布时间】:2015-02-19 05:21:51
【问题描述】:
在我的应用程序中,我从项目数据库中提取数据。当我这样做时,我想向用户发出数据提取正在进行中的信号。我想通过使当前帧view.getFrame2() 不可见并使view.getFrame3() 可见来实现这一点。第 3 帧将有 GIF 图像,帧标题为“正在提取”。我能够实现我的目标,但我无法查看框架中的图像。一片空白。
下面是我正在使用的代码 sn-p;一个类用于视图,另一个用于控制器,另一个用于模型。我还有一个主类来初始化所有的 M-V-C 类。我不想通过创建更多类来使代码复杂化。
查看
My View class:-
/** View**/
package mvc.views;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.KeyEvent;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Locale;
import javax.swing.*;
public class View {
JFrame frame2, frame3;
JPanel panel3;
Toolkit tk;
Image icon;
Color background;
public View() {
/** processing image view **/
frame3 =new JFrame();
frame3.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
frame3.setTitle( "Extraction in process...." );
try {
icon = new ImageIcon("C:\\Users\\pc033k\\Desktop\\gears_animated.gif").getImage();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
panel3 = new JPanel();
background = Color.white;
panel3.setOpaque(true);
frame3.setContentPane(panel3);;
frame3.setBounds(100, 100, 400, 400);
frame3.setLocationRelativeTo(null);
frame3.setVisible(false);
/** End of processing image view **/
}
public void paint (Graphics g)
{
panel3.paint(g);
panel3.setBackground(background);
g.drawImage(icon,100,100,500,500,null);
}
}
/** End of View**/
控制器
/** Start Controller**/
package mvc.controllers;
import java.awt.Component;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.IOException;
import java.util.Calendar;
import java.util.Date;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JTextField;
import mvc.models.*;
import mvc.views.*;
public class Controller {
public Model model;
public View view;
public ActionListener myButtonListener;
//public MyDateListener listener;
boolean status, process1;
public String user, password, FN, LN, type;
JTextField text1, text2;
JCalendarCombo cal1, cal2;
public Date date1, date2;
public Controller(Model model, View view) {
this.model = model;
this.view = view;
}
public class MyButtonListener implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
if(e.getSource() == view.getGetcrmdataButton()){
FN = view.getUserText1().getText();
LN = view.getUserText2().getText();
date1 = view.getCalendar2().getDate();
date2 = view.getCalendar3().getDate();
type = (String) view.getComb1().getSelectedItem();
view.getFrame2().dispose();
view.getFrame3().setVisible(true);
view.getFrame3().repaint();
try {
process1 = model.CRMDataExtract(FN, LN, date1, date2, type);
} catch (Exception e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
if(process1 == true){
view.getFrame3().setVisible(false);
view.getFrame2().setVisible(true);
JOptionPane.showMessageDialog((Component) (e.getSource()),
"pealse Check the output file for the data");
}
else
{
view.getFrame3().setVisible(false);
view.getFrame2().setVisible(true);
JOptionPane.showMessageDialog((Component) (e.getSource()),
" No Records found or Data Extraction failed!!");
}
}
}
}
【问题讨论】:
-
1) 请参阅The Use of Multiple JFrames, Good/Bad Practice? 2) 为了尽快获得更好的帮助,请发布MCVE(最小完整可验证示例)或SSCCE(简短、自包含、正确示例)。
-
BTW - “将 GIF 图像插入 JFrame 并按需使其可见和不可见” 最简单的方法是在
JLabel中显示图像。要使其不可见,请设置一个与原始图像大小相同但完全透明的新图标(例如new BufferedImage(w,h,BufferedImage.TYPEE_INT_ARGB))。 -
@Andrew Thompson 感谢您的建议。我会努力在我未来的发展中实现。
标签: java swing jframe paint imageicon