Java JFrame .setSize(x,y)不起作用? [英] Java JFrame .setSize(x, y) not working?

查看:999
本文介绍了Java JFrame .setSize(x,y)不起作用?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

当我执行这段代码时,弹出一个小窗口,其内部大约是116x63,整个大小包括~140x100的边框。如何将内部设置为我需要的内容?

When I execute this bit of code, a tiny window pops up that, and the inside of it is about 116x63, and the entire size including the border of ~140x100. How do I set the inside to be what I need it to?

public static void graphics() {
    JFrame frame = new JFrame();

    String title = "test window";
    frame.setTitle(title);

    frame.setSize(gridRow, gridCol); //101 x 101
    frame.setResizable(true);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setVisible(true);
}


推荐答案


  1. 创建一个自定义组件,从 JPanel 扩展,覆盖其 getPreferredSize 方法,以返回您想要的窗口大小。

  2. 将其添加到您的框架或将其设置为框架的内容窗格。

  3. 致电 pack 在框架上

  1. Create a custom component, extending from JPanel, override its getPreferredSize method to return the size of the window you would like.
  2. Either add this to your frame or set it as the frame's content pane.
  3. Call pack on the frame



更新为示例



Updated with example

在我的电脑上,帧大小= java.awt.Dimension [width = 216,height = 238]

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.FontMetrics;
import java.awt.Graphics;
import java.awt.Graphics2D;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;

public class TestFrameSize01 {

    public static void main(String[] args) {
        new TestFrameSize01();
    }

    public TestFrameSize01() {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                try {
                    UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
                } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
                }

                JFrame frame = new JFrame("Testing");
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                frame.setLayout(new BorderLayout());
                frame.add(new TestPane());
                frame.pack();
                frame.setLocationRelativeTo(null);
                frame.setVisible(true);

                System.out.println("Frame size = " + frame.getSize());
            }
        });
    }

    public class TestPane extends JPanel {

        public TestPane() {
        }

        @Override
        public Dimension getPreferredSize() {
            return new Dimension(200, 200);
        }

        @Override
        protected void paintComponent(Graphics g) {
            super.paintComponent(g);
            Graphics2D g2d = (Graphics2D) g.create();
            String text = getWidth() + "x" + getHeight();
            FontMetrics fm = g2d.getFontMetrics();
            int x = (getWidth() - fm.stringWidth(text)) / 2;
            int y = ((getHeight() - fm.getHeight()) / 2) + fm.getAscent();
            g2d.drawString(text, x, y);
            g2d.dispose();
        }
    }    
}

这篇关于Java JFrame .setSize(x,y)不起作用?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆