【发布时间】:2014-04-26 16:56:54
【问题描述】:
我有一个 JFrame,其中包含一个带有 JButton“Press Me”的 JPanel
按下“Press me”按钮将在同一个 JFrame 中切换到另一个 JPanel(SecondPanel)
我有一个 Timer 函数,它将向 JFrame 添加另一张卡片,该函数将在 6 秒后运行。
问题是我必须先展开或最小化 JFrame 窗口,然后卡片才会出现在 JFrame 中。我希望卡片出现在 JFrame 中而不展开或最小化 JFrame 窗口
谁能帮我解决这个问题并向我解释发生了什么
谢谢
用于运行项目的主类
package testing;
import java.io.*;
import java.security.*;
import javax.xml.bind.DatatypeConverter;
import java.lang.*;
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import java.awt.image.BufferedImage;
import javax.imageio.ImageIO;
public class Testing extends JPanel
{
public static void main(String[] args)
{
frame = new JFrame();
LoginPanel lp = new LoginPanel();
frame.add(lp);
frame.pack();
frame.validate();
frame.setVisible(true);
}
static JFrame frame;
}
LoginPanel 类
import java.util.*;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class LoginPanel extends JPanel
{
LoginPanel()
{
Loginbtn = new JButton("Press Me");
Loginbtn.addActionListener(new LoginButtonListener());
add(Loginbtn);
}
private class LoginButtonListener implements ActionListener
{
public void actionPerformed(ActionEvent event)
{
SecondPanel sp = new SecondPanel();
Utility.ChangePanel(sp);
sp.run();
}
}
JButton Loginbtn;
}
SecondPanel 类
package testing;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
public class SecondPanel extends JPanel
{
SecondPanel()
{
setLayout(new GridLayout(2,2));
//set deck image
File deckfile = new File("./src/testing/Ace_Club_1_1.png"); //deck image file location
try
{
Deckimg = ImageIO.read(deckfile); //read deck image
}
catch (IOException e)
{
}
Image scaledInstance = Deckimg.getScaledInstance(100, -1, Image.SCALE_SMOOTH);
DeckLabel = new JLabel(new ImageIcon(scaledInstance));
add(DeckLabel);
}
public void run()
{
Timer timer = new Timer(5000, new ActionListener()
{
@Override
public void actionPerformed(ActionEvent arg0)
{
// Code to be executed
File Diamondfile = new File("./src/testing/Ace_Diamond_1_1.png"); //deck image file location
try
{
Diamondimg = ImageIO.read(Diamondfile); //read deck image
}
catch (IOException e)
{
}
Image scaledInstance = Diamondimg.getScaledInstance(100, -1, Image.SCALE_SMOOTH);
DiamondLabel = new JLabel(new ImageIcon(scaledInstance));
add(DiamondLabel);
}
});
timer.setRepeats(false); // Only execute once
timer.start(); // Go go go!
}
JLabel DeckLabel;
JPanel DeckPanel;
BufferedImage Deckimg;
JLabel DiamondLabel;
JPanel DiamondPanel;
BufferedImage Diamondimg;
}
用于在 JFrame 中切换 JPanel 的实用程序类
package testing;
import java.security.MessageDigest;
import java.util.*;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class Utility
{
public static void ChangePanel(JPanel jp)
{
testing.Testing.frame.getContentPane().removeAll();
testing.Testing.frame.add(jp);
testing.Testing.frame.validate();
}
}
【问题讨论】:
标签: java image debugging timer jframe