如何调整弹出组件的大小

时间:2012-11-07 06:19:59

标签: java swing popup

如何在调用show()方法后调整弹出组件的大小? 这个例子不起作用:

package test;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.*;

public class MyFrame extends JFrame {

    public static void main(String[] args) {

        SwingUtilities.invokeLater(new Runnable() {

            @Override
            public void run() {
                new MyFrame().setVisible(true);
            }
        });
    }

    public MyFrame() {

        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        setLayout(new BorderLayout());
        setSize(400, 300);
        setLocation(400, 300);

        addMouseListener(new MouseAdapter() {

            @Override
            public void mouseClicked(MouseEvent e) {
                showPopup();
            }
        });
    }

    void showPopup() {
        JComponent popup = new JPanel();
        popup.setPreferredSize(new Dimension(100, 40));
        popup.setBorder(BorderFactory.createLineBorder(Color.GREEN));
        Popup p = PopupFactory.getSharedInstance().getPopup(this, popup, this.getLocationOnScreen().x, this.getLocationOnScreen().y);
        p.show();

        popup.setPreferredSize(new Dimension(200, 80));
        popup.setBorder(BorderFactory.createLineBorder(Color.RED));
    }
}

组件popup的大小不会改变。

我找到了解决方案,你必须明确改变弹出组件窗口的大小。

SwingUtilities.getWindowAncestor(popup).setSize(200, 80);

但是这个解决方案只有在弹出组件位于另一个窗口的情况下才有效。这不是我需要的。

1 个答案:

答案 0 :(得分:0)

不提供首选尺寸。它会自动调整大小。

  

popup.setPreferredSize(new Dimention(200,80));

相关问题