Swing JDialog size в соответствии с родительским фреймом - PullRequest
1 голос
/ 03 декабря 2011

Я создаю диалог и устанавливаю его размер как

setSize(m_appview.getSize());

, где m_appview - это JFrame, диалоговое окно которого появится выше.Этот JFrame содержит JButton, который при нажатии отображает диалоговое окно.Теперь, когда я максимизирую фрейм и нажимаю кнопку, открывается диалоговое окно с правильной шириной, соответствующей ширине фрейма, но с высотой, которая меньше, чем у JFrame.

Что делать?

Ответы [ 2 ]

3 голосов
/ 03 декабря 2011

Работает нормально для меня при использовании этого кода в ActionListener.

button.addActionListener( new ActionListener()
{
    public void actionPerformed(ActionEvent e)
    {
        JButton button = (JButton)e.getSource();
        Window window = SwingUtilities.windowForComponent(button);
        JDialog dialog = new JDialog();
        dialog.setBounds( window.getBounds() );
        dialog.setVisible(true);
    }
});

Если вам нужна дополнительная помощь, опубликуйте SSCCE , который демонстрирует проблему.

3 голосов
/ 03 декабря 2011

например

enter image description here или enter image description here

из кода

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.Point;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFrame;

public class JFrameAndJDialog {

    private JFrame frame = new JFrame("PopupFactory Sample");
    private JDialog dialog = new JDialog();
    private JButton start1 = new JButton("Pick Me for Popup");
    private JButton start2 = new JButton("Close this Popup");
    private Point pnt = null;
    private Dimension dim = null;

    public JFrameAndJDialog() {
        start2.addActionListener(new ActionListener() {

            public void actionPerformed(ActionEvent e) {
                dialog.setVisible(false);
            }
        });
        dialog.add(start2, BorderLayout.SOUTH);
        dialog.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
        dialog.setUndecorated(true);
        dialog.setVisible(false);
        start1.addActionListener(new ActionListener() {

            public void actionPerformed(ActionEvent e) {
                dim = frame.getSize();
                pnt = frame.getLocationOnScreen();
                int x = dim.width - 8;
                int y = dim.height - 8;
                dialog.setSize(x, y);
                x = pnt.x + 4;
                y = pnt.y + 4;
                dialog.setLocation(x, y);
                visibleForJDialog();
            }
        });
        frame.add(start1, BorderLayout.SOUTH);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setLocation(150, 150);
        frame.setSize(300, 300);
        frame.setVisible(true);
    }

    private void visibleForJDialog() {
        java.awt.EventQueue.invokeLater(new Runnable() {

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

    public static void main(final String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {

            @Override
            public void run() {
                JFrameAndJDialog uPF = new JFrameAndJDialog();
            }
        });
    }
}
...