当前位置: 首页 > 知识库问答 >
问题:

如何限制JDialog的尺寸

卫学真
2023-03-14
private final Dimension SCREEN_DIMENSION = Toolkit.getDefaultToolkit().getScreenSize();

@Override
public Dimension getMaximumSize() {
    return new Dimension(SCREEN_DIMENSION.width / 2, SCREEN_DIMENSION.height / 2);
}

但是我尝试重写getminimumSize()getPreferredSize()getSize()等似乎都不起作用,或者可能是我实现错误。我需要调整它的内部子组件吗?或者仅仅调整JDialog/code>就足够了?如果是,怎么做?


共有1个答案

萧懿轩
2023-03-14

我创建了一个简单的GUI来说明我的注释。这是JFrame。

这是JDialog。

下面是完整的示例代码。您必须修改createPendenciesPanel方法,使其更加真实。

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.SwingUtilities;

public class JDialogTest implements Runnable {

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new JDialogTest());
    }

    private JFrame frame;

    @Override
    public void run() {
        frame = new JFrame("JDialog Test");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        frame.add(createMainPanel());

        frame.pack();
        frame.setLocationByPlatform(true);
        frame.setVisible(true);
    }

    private JPanel createMainPanel() {
        JPanel panel = new JPanel(new BorderLayout());
        panel.setBorder(BorderFactory.createEmptyBorder(
                150, 100, 150, 100));
        panel.setPreferredSize(new Dimension(400, 600));

        JButton button = new JButton("Open JDialog");
        button.addActionListener(new ButtonListener());
        panel.add(button);

        return panel;
    }

    public class ButtonListener implements ActionListener {

        @Override
        public void actionPerformed(ActionEvent e) {
            new PendenciesDialog(frame, "Pendencies Dialog");
        }

    }

    public class PendenciesDialog  extends JDialog {

        private static final long serialVersionUID = 1L;

        public PendenciesDialog(JFrame frame, String title) {
            super(frame, true);
            
            setDefaultCloseOperation(DISPOSE_ON_CLOSE);
            setTitle(title);

            add(createMainPanel(frame));
            pack();
            setLocationRelativeTo(frame);
            setVisible(true);
        }
        
        private JPanel createMainPanel(JFrame frame) {
            JPanel panel = new JPanel(new BorderLayout());
            
            JPanel displayPanel = createDisplayPanel();
            JScrollPane scrollPane = new JScrollPane(displayPanel);
            panel.add(scrollPane, BorderLayout.CENTER);
            
            Dimension d = frame.getSize();
            Dimension p = displayPanel.getPreferredSize();
            panel.setPreferredSize(new Dimension(p.width + 50, d.height / 2));
            
            return panel;
        }
        
        private JPanel createDisplayPanel() {
            JPanel panel = new JPanel(new GridLayout(0, 1, 10, 10));
            panel.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10));
            
            for (int i = 0; i < 6; i++) {
                panel.add(createPendenciesPanel());
            }
            
            return panel;
        }
        
        private JPanel createPendenciesPanel() {
            JPanel panel = new JPanel(new FlowLayout());
            panel.setBackground(Color.LIGHT_GRAY);
            panel.setPreferredSize(new Dimension(100, 200));
            
            return panel;
        }

    }
    
}
 类似资料:
  • 我需要限制节点的子级大小。我的父节点是一个VBox。我试图设置maxWidth,但它不起作用(wide子级不在VBox范围内) 如何将孩子的大小限制在父母的范围内?除了绑定还有别的办法吗? 预期行为:Children maxWidth自动与VBox相同(无需手动设置) 我的代码(fxml):

  • 我正在尝试autowire一个特定大小的对象列表,但尽管搜索了所有与stackoverflow相关的问题,我还是看不到前面讨论过的类似的内容。我很惊讶这永远都不需要? 我尝试了如下所示,但我得到了错误@bean public List listMyListeners(@value(“${workflow.threads:10}”)int threads){return new ArrayList(

  • 问题内容: 我想在JDialog中添加诸如TextField,Button等组件。 问题答案: 1)首先创建一个Jpanel 2)将组件添加到该JPanel 3)创建JDialog 4)将JPanel添加到JDialog

  • 我有一个Jframe(美因茨), 它有一个按钮(showDialog), 当用户单击该按钮时, jdialog (Dialogz) 将显示, 那个jdialog有一个按钮 如何从该按钮关闭jdialog(在jdialog内部)? 我可以在创建对话框的实例后更改对话框的模式吗? 我需要阻止jdialog的所有者 我试着。。。 非常感谢你的任何帮助

  • 问题内容: open_basedir限制了目录树中PHP可以打开的文件。 我在Web根目录之外存储了几个类库和配置文件。这样,Web服务器不会使它们公开访问。但是,当我尝试从应用程序中包含它们时,出现如下所示的open_basedir限制错误: 警告:realpath()[function.realpath]:open_basedir限制有效。文件(/var/www/vhosts/domain.t

  • 问题内容: 与PostgreSQL中的SQL Server或DB2或mySQL等效吗? 问题答案: 您可以像在MySQL中一样使用LIMIT,例如: