मैं एक JFrame चेतन करने के लिए आधे आकार बनने के लिए जब मैं अपने कार्यक्रम में एक बटन दबाएँ
तो जब आप बटन पर क्लिक करें आप बटन तक पहुंच नहीं है। फिर आप इसका उपयोग कर सकते हैं:
SwingUtilities.windowForComponent(theButton);
फ्रेम का संदर्भ प्राप्त करने के लिए।
तो अब जब आप टाइमर के लिए एक्शनलिस्टर बनाते हैं तो आप विंडो में एक्शनलिस्टर के लिए तर्क के रूप में पास कर सकते हैं।
संपादित करें:
सुझाव MRE से सरल और सीधे आगे और कई मामलों में उपयोग करने के लिए आसान है (और शायद इस मामले में बेहतर समाधान)।
मेरा सुझाव थोड़ा अधिक जटिल है लेकिन यह आपको स्विंग यूटिलिटीज विधि के साथ पेश कर रहा था जो अंततः आपको अधिक पुन: प्रयोज्य कोड लिखने की अनुमति देगा जो संभावित रूप से किसी भी फ्रेम या संवाद द्वारा उपयोग किया जा सकता है।
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class AnimationSSCCE extends JPanel
{
public AnimationSSCCE()
{
JButton button = new JButton("Start Animation");
button.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
JButton button = (JButton)e.getSource();
WindowAnimation wa = new WindowAnimation(
SwingUtilities.windowForComponent(button));
}
});
add(button);
}
class WindowAnimation implements ActionListener
{
private Window window;
private Timer timer;
public WindowAnimation(Window window)
{
this.window = window;
timer = new Timer(20, this);
timer.start();
}
@Override
public void actionPerformed(ActionEvent e)
{
window.setSize(window.getWidth() - 5, window.getHeight() - 5);
// System.out.println(window.getBounds());
}
}
private static void createAndShowUI()
{
JFrame frame = new JFrame("AnimationSSCCE");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(new AnimationSSCCE());
frame.setSize(500, 400);
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
public static void main(String[] args)
{
EventQueue.invokeLater(new Runnable()
{
public void run()
{
createAndShowUI();
}
});
}
}
बेशक आप टाइमर को रोकने के लिए जब winow एक निश्चित न्यूनतम आकार तक पहुँच जाता है चाहेगा का:
एक साधारण उदाहरण की तरह कुछ होगा। मैं उस कोड को आपके पास छोड़ दूंगा।
'frame.getWidth()' कोशिश करें जहां 'फ्रेम' जेएफआरएएम है जिसका आप उल्लेख कर रहे हैं। – fireshadow52