我應該編寫一個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才能調整其元件的大小.