我用谷歌搜索并找不到答案:
我有一个 JFrame 作为 GUI 并设置了一个 componentListener
this.addComponentListener(new CL(this, logger));
在 componentListener 我有 componentResized 等...
public void componentResized(ComponentEvent e) {
if (e.getSource() == gui) {
here I do the code
}
}
在 Java 6 下一切正常,但在 Java 7 下,Jframe 正在调整大小但没有被重新绘制:组件侦听器没有被调用
我尝试了一些 StackOverflow 的替代方案以编码方式,但没有办法让它工作。
当我最小化 GUI 窗口并恢复它时,会调用“componentResized”。
任何人都知道发生了什么以及为什么它在 Java 6 而不是 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 下运行时,您会收到“Window Resized: Frame”消息。
同样在 Java 7 下运行,完全没有消息。
下面是2个图片链接:
- 爪哇 6
- 爪哇 7