0

メソッドを呼び出した後にポップアップコンポーネントのサイズを変更する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);

ただし、このソリューションは、ポップアップ コンポーネントが別のウィンドウにある場合にのみ機能します。そして、これは私が必要とするものではありません。

4

1 に答える 1

0

希望のサイズを指定しないでください。自動的にサイズ変更されます。

popup.setPreferredSize (新しい次元 (200, 80));

于 2012-11-07T06:43:16.507 に答える