问题描述
我在Google周围搜索,找不到答案:
I've Googled around and could not find an answer:
我有一个JFrame作为GUI,并设置了
I have a JFrame as a GUI and set a componentListener like
this.addComponentListener(new CL(this, logger));
在componentListener中,我有componentResized,等等...
In the componentListener I have the componentResized, etc...
public void componentResized(ComponentEvent e) {
if (e.getSource() == gui) {
here I do the code
}
}
在Java 6下一切正常,但是在Java 7下,Jframe的大小已调整,但未重绘:组件侦听器未得到调用
Everything is working fine under Java 6, but under Java 7, the Jframe is being resized but is not being repainted: the component listener is not getting called
我尝试了StackOverflow的一些替代方法,但没有办法使其发挥作用.
I tried some alternatives from StackOverflow in the way of coding, but no way to make it work.
当我最小化GUI窗口并还原它时,就会调用"componentResized".
When I minimize the GUI window and restore it, then "componentResized" is being called.
任何人都知道发生了什么,以及为什么它可以在Java 6而不是Java 7下工作.
Anyone an idea what's going on and why it works under Java 6 and not Java 7.
这是示例代码:
public class Frame extends JFrame {
private JPanel panel;
public Frame() {
super();
getContentPane().setBounds(new Rectangle(0, 0, 200, 200));
getContentPane().setLayout(null);
getContentPane().add(getPanel());
this.addComponentListener(new ComponentListener() {
@Override
public void componentResized(ComponentEvent e) {
System.out.println("Window Resized: Frame");}
@Override
public void componentMoved(ComponentEvent e) {}
@Override
public void componentShown(ComponentEvent e) {}
@Override
public void componentHidden(ComponentEvent e) {}});
this.setSize(200, 200);
this.setPreferredSize(new Dimension(200, 200));
this.pack();
}
public JPanel getPanel() {
if (panel == null) {
panel = new JPanel();
panel.setBackground(Color.RED);
panel.setBounds(0, 0, 200, 200);
panel.setPreferredSize(new Dimension(200, 200));
}
return panel;
}
}
这是启动类:
public class StartUp {
public static void main(String[] args) {
try {
UIManager.setLookAndFeel(UIManager.getCrossPlatformLookAndFeelClassName());
} catch (Exception e) {
e.printStackTrace();
}
Frame app = new Frame();
app.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
app.pack();
app.setVisible(true);
}
}
在Java 6下运行时,您会收到窗口大小已调整:框架"消息.
在Java 7下同样运行,根本没有消息.
When run under Java 6 you get the "Window Resized: Frame" message.
The same run under Java 7, no messages at all.
以下是指向图片的2个链接:
Below are 2 links to Pictures:
- Java 6
- Java 7
推荐答案
-
您的代码(在删除balast之前,已更改为标准)对我来说正常
your code (before balast removed, changed to standard) work for me correctly
ComponentListener
从每个像素触发事件这是
componentResized()
的基本属性,否则需要SwingTimer.restart()
直到调整大小为止)this is basic property of
componentResized()
, otherwise requiredSwingTimer.restart()
untill resize ended)镇流器已移除,已更改为标准
balast removed, changed to standard
import java.awt.Color; import java.awt.Dimension; import java.awt.EventQueue; import java.awt.event.ComponentAdapter; import java.awt.event.ComponentEvent; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.UIManager; public class MyFrame { private JFrame frame = new JFrame(); private JPanel panel; public MyFrame() { frame.add(getPanel()); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.pack(); frame.setVisible(true); frame.addComponentListener(new ComponentAdapter() { @Override public void componentResized(ComponentEvent e) { System.out.println("Window Resized: Frame"); } }); } public JPanel getPanel() { if (panel == null) { panel = new JPanel() { @Override public Dimension getPreferredSize() { return new Dimension(300, 200); } }; panel.setBackground(Color.RED); } return panel; } public static void main(String[] args) { try { UIManager.setLookAndFeel(UIManager.getCrossPlatformLookAndFeelClassName()); } catch (Exception e) { e.printStackTrace(); } EventQueue.invokeLater(new Runnable() { @Override public void run() { MyFrame app = new MyFrame(); } }); } }
这篇关于Java 7调整JFrame的大小(我的GUI):componentListener未被触发的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!