gpt4 book ai didi

Java 7 调整 JFrame(我的 GUI)的大小 : the componentListener is not getting fired

转载 作者:行者123 更新时间:2023-11-30 11:28:57 24 4
gpt4 key购买 nike

我用 Google 搜索了一下,找不到答案:

我有一个 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 下运行时,您会收到“窗口已调整大小:框架”消息。
同样在 Java 7 下运行,根本没有消息。

下面是2个图片链接:

  • Java 6

Java 6 Frame Image

  • Java 7

Java 7 Frame Image

最佳答案

  • 您的代码(在 balast 移除之前,更改为标准)对我来说正确工作

  • ComponentListener 从每个像素触发一个事件

  • 这是 componentResized() 的基本属性,否则需要 SwingTimer.restart() 直到调整大小结束)

去除镇流器,改为标准

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)的大小 : the componentListener is not getting fired,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18697046/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com