天天看點

java swing 設定元件大小_使用Java.swing使用可調整大小的元件對GUI進...

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