java让窗口可调大小_使用Java.swing使用可调整大小的组件对GUI进行编程

本文档描述了在Java Swing中创建一个GUI,其中所有组件都是可动态调整大小的。作者遇到了一个问题,即在改变框架大小后立即点击按钮时,事件无法正常处理。他们分享了代码片段,包括GlassPane的使用以及事件重新发送的实现,以解决组件大小调整的问题。目前,代码在某些情况下无法正确响应按钮点击。

我应该编写一个GUI。此GUI中的每个组件都必须能够动态调整大小。

到目前为止,我使用了GlassPane和ContentPane,添加了一个JPanel并在其上添加了一个按钮。当单击GlassPane时,将获取事件,分析基础组件,为此特殊组件创建新的句柄并将其处理到所述组件。我添加了一个按钮,该按钮应自动更改其大小。像我想要的那样工作。但是:当我更改框架的大小并立即单击按钮时,什么也没有发生。GlassPane能够识别按钮,但似乎有些问题…

这是拦截GlassPane并将事件提供给组件的代码:

private void resendEvent(MouseEvent e) {

//Point p = SwingUtilities.convertPoint(content.getGlassPane(), e.getPoint(), content.getContentPane());

Point p = e.getPoint();

Component component = SwingUtilities.getDeepestComponentAt(content.getContentPane(), p.x, p.y);

System.out.println(component.toString());

Point p2 = component.getLocation();

MouseEvent event = new MouseEvent(component, e.getID(), e.getWhen(), e.getModifiers(), p2.x, p2.y, e.getClickCount(), e.isPopupTrigger());

//following lines have the same effects

Toolkit.getDefaultToolkit().getSystemEventQueue().postEvent(event);

//component.dispatchEvent(event);

}

感谢您的帮助/建议

好的,这里还有更多代码:

import java.awt.*;

import java.awt.event.*;

import javax.swing.*;

import resize.ResizablePanel;

public class ExampleProblem extends JFrame {

public ExampleProblem () {

JPanel glassPane = new JPanel();

glassPane.setOpaque(false);

glassPane.addMouseListener(new MouseAdapter(){

@Override

public void mousePressed(MouseEvent e) {

resendEvent(e);

}

@Override

public void mouseReleased(MouseEvent e) {

resendEvent(e);

}

});

this.setGlassPane(glassPane);

glassPane.setVisible(true);

JButton b = new JButton("Test");

b.addActionListener(new ActionListener(){

@Override

public void actionPerformed(ActionEvent arg0) {

System.out.println("Button clicked");

}});

JPanel p = new JPanel();

p.add(b);

setContentPane(p);

pack();

setVisible(true);

}

private void resendEvent(MouseEvent e) {//Point p = SwingUtilities.convertPoint(content.getGlassPane(), e.getPoint(), content.getContentPane());

Point p = e.getPoint();

Component component = SwingUtilities.getDeepestComponentAt(this.getContentPane(), p.x, p.y);

System.out.println(component.toString());

Point p2 = component.getLocation();

MouseEvent event = new MouseEvent(component, e.getID(), e.getWhen(), e.getModifiers(), p2.x, p2.y, e.getClickCount(), e.isPopupTrigger());

Toolkit.getDefaultToolkit().getSystemEventQueue().postEvent(event);

}

public static void main(String[] args) {

new ExampleProblem();

}

}

希望问题现在已经清楚了。是否有可能我不应该使用setContentPane()?但是我们必须覆盖JContentPane才能调整其组件的大小。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值