Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java frame.setresizeable(false)不工作!它更改窗口大小,而不是保留尺寸_Java_Window_Jframe_Resizable_Dimension - Fatal编程技术网

Java frame.setresizeable(false)不工作!它更改窗口大小,而不是保留尺寸

Java frame.setresizeable(false)不工作!它更改窗口大小,而不是保留尺寸,java,window,jframe,resizable,dimension,Java,Window,Jframe,Resizable,Dimension,在我的TestCalculator类中,使我的计算器类的JFrame不可压缩(不是一个字),但它在框架的底部和右侧添加了一些像素。。。或者从一两个面板中删除一些。我不知道如何准确地表达它,但我想使帧的大小固定,而没有额外的像素和垃圾 是的,我在另一个网站上问过,但他们帮不了我,明天早上就要交了,我已经做了两个星期了,昨天刚刚让计算器工作起来。我整天都在谷歌上搜索,找不到具体的解决办法 我不确定到底是什么原因导致它不能正常工作(duh),但它可能在代码中的任何地方,可能是它的顺序,idk 计算器类

在我的TestCalculator类中,使我的计算器类的JFrame不可压缩(不是一个字),但它在框架的底部和右侧添加了一些像素。。。或者从一两个面板中删除一些。我不知道如何准确地表达它,但我想使帧的大小固定,而没有额外的像素和垃圾

是的,我在另一个网站上问过,但他们帮不了我,明天早上就要交了,我已经做了两个星期了,昨天刚刚让计算器工作起来。我整天都在谷歌上搜索,找不到具体的解决办法

我不确定到底是什么原因导致它不能正常工作(duh),但它可能在代码中的任何地方,可能是它的顺序,idk

计算器类:

frame.setResizable(false);

框架有边框。如果操作正确,
pack
将尝试创建一个可视区域(框架边框内的空间),以匹配内容窗格的首选大小

与其担心框架的大小,不如让这两个组件和布局管理器自己决定

第一个值是图像面板/图像的大小,第二个值是窗口的大小

在调用
pack
之前,请确保始终调用
setresizeable

public class TestCalculator {

  public static void main(String[] args) {

        ImagePanel panel = new ImagePanel(new ImageIcon("01_Crane_AGweb.jpg").getImage());

        SimpleArithmeticCalculator calc = new SimpleArithmeticCalculator();

        JFrame frame = new JFrame("Simple Arithmetic Calculator");

        frame.setResizable(false);   

        frame.getContentPane().add(panel);

        frame.getContentPane().add(calc);

        **frame.setPreferredSize(new Dimension(343,343));**

        frame.pack();

        frame.setVisible(true);      

        **frame.setMinimumSize(new Dimension(343,371));**

        frame.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);

        panel.setVisible(true);

        panel.setOpaque(true);

        panel.add(calc);

        calc.SetColors(null , Color.white , new Color(72,61,139));

        calc.setVisible(true);

        calc.setOpaque(false);

}

}

class ImagePanel extends JPanel {

  private Image img;

  public ImagePanel(String img) {

    this(new ImageIcon(img).getImage());

  }

  public ImagePanel(Image img) {

    this.img = img;

    Dimension size = new Dimension(img.getWidth(null), img.getHeight(null));

    this.setPreferredSize(new Dimension(size));

    this.setMinimumSize(new Dimension(size));

    this.setMaximumSize(new Dimension(size));

    this.setSize(new Dimension(size));

    **this.setLayout(null);**

  }

    public void paintComponent(Graphics g) {

        super.paintComponent(g);

        g.drawImage(img, 0, 0, this.getWidth(),this.getHeight(),this);

    }

}
使用简单布局示例更新

import java.awt.Color;
import java.awt.Dimension;
import java.awt.FontMetrics;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Window;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;

public class TestCalculator {

    public static void main(String[] args) {
        ImagePanel panel = new ImagePanel(new ImageIcon("/path/to/image").getImage());
        JFrame frame = new JFrame("Simple Arithmetic Calculator");
        frame.getContentPane().add(panel);

        frame.setResizable(false);
        frame.pack();
        frame.setVisible(true);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }
}

class ImagePanel extends JPanel {

    private Image img;

    public ImagePanel(String img) {
        this(new ImageIcon(img).getImage());
    }

    public ImagePanel(Image img) {
        this.img = img;
        Dimension size = new Dimension(img.getWidth(null), img.getHeight(null));
    }

    public void paintComponent(Graphics g) {
        super.paintComponent(g);
        g.drawImage(img, 0, 0, this);
        g.setColor(Color.WHITE);
        FontMetrics fm = g.getFontMetrics();
        Window window = SwingUtilities.getWindowAncestor(this);
        int y = fm.getAscent();
        g.drawString(getWidth() + "x" + getHeight() + "; " + window.getWidth() + "x" + window.getHeight(), 0, y);
    }
}

你可以做一些更像

ImagePanel panel = new ImagePanel(new ImageIcon("01_Crane_AGweb.jpg").getImage());
SimpleArithmeticCalculator calc = new SimpleArithmeticCalculator();

JFrame frame = new JFrame("Simple Arithmetic Calculator");

frame.setResizable(false);   
// This is not going to come out well, as BorderLayout
// will only allow a single component to occupy the CenterPosition
frame.getContentPane().add(panel);
frame.getContentPane().add(calc);
frame.setPreferredSize(new Dimension(343,343));
// Now sized to the preferred size of the calc pane...
frame.pack();
frame.setVisible(true);      
frame.setMinimumSize(new Dimension(343,371));
frame.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
// Rather pointless as Swing components are visible by default...
panel.setVisible(true);
panel.setOpaque(true);
// This is now going to change the preferred size of the window...
panel.add(calc);
相反

完整的跑步示例…

ImagePanel panel = new ImagePanel(new ImageIcon("01_Crane_AGweb.jpg").getImage());
SimpleArithmeticCalculator calc = new SimpleArithmeticCalculator();

JFrame frame = new JFrame("Simple Arithmetic Calculator");

panel.setVisible(true);
panel.setOpaque(true);
panel.add(calc);
frame.getContentPane().add(panel);

frame.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
frame.setResizable(false);   
frame.pack();
frame.setVisible(true);      

导入java.awt.BorderLayout;
导入java.awt.Color;
导入java.awt.Dimension;
导入java.awt.EventQueue;
导入java.awt.Font;
导入java.awt.Graphics;
导入java.awt.GridLayout;
导入java.awt.Image;
导入java.awt.event.ActionEvent;
导入java.awt.event.ActionListener;
导入java.awt.event.KeyEvent;
导入javax.swing.BorderFactory;
导入javax.swing.ImageIcon;
导入javax.swing.JButton;
导入javax.swing.JFrame;
导入javax.swing.JPanel;
导入javax.swing.JTextField;
导入javax.swing.UIManager;
导入javax.swing.UnsupportedLookAndFeelException;
公共类TestCalculator100{
公共静态void main(字符串[]args){
新的TestCalculator100();
}
公共测试计算器100(){
invokeLater(新的Runnable(){
@凌驾
公开募捐{
试一试{
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
}catch(ClassNotFoundException |实例化Exception | IllegalacessException |不支持ookandfeelException ex){
}
ImagePanel panel=新的ImagePanel(新的ImageIcon(“01_Crane_AGweb.jpg”).getImage();
SimpleArtimeticCalculator calc=新的SimpleArtimeticCalculator();
计算设置不透明(假);
面板。添加(计算);
JFrame=新的JFrame(“简单算术计算器”);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().add(面板);
frame.setresizeable(false);
frame.pack();
frame.setVisible(true);
}
});
}
类ImagePanel扩展了JPanel{
私有图像img;
公共图像面板(字符串img){
这个(新的ImageIcon(img).getImage());
}
公共图像面板(图像img){
this.img=img;
维度大小=新维度(img.getWidth(null)、img.getHeight(null));
}
@凌驾
公共组件(图形g){
超级组件(g);
g、 drawImage(img,0,0,this.getWidth(),this.getHeight(),this);
}
}
公共静态类SimpleArtimeticCalculator扩展了JPanel实现ActionListener{
专用静态最终int BTN_ONE=0;
专用静态最终int BTN_TWO=1;
专用静态最终int BTN_三=2;
专用静态最终int BTN_DIV=3;
专用静态最终int BTN_四=4;
专用静态最终int BTN_五=5;
专用静态最终int BTN_六=6;
专用静态最终int BTN_MULT=7;
专用静态最终int BTN_SEVEN=8;
专用静态最终int BTN_八=9;
专用静态最终int BTN_九=10;
专用静态最终int BTN_减=11;
专用静态最终int BTN_零=12;
专用静态最终整数BTN_十进制=13;
专用静态最终int BTN_功率=14;
专用静态最终int BTN_PLUS=15;
专用静态最终int BTN_CLEAR=16;
专用静态最终int BTN_百分比=17;
专用静态最终int BTN_退格=18;
专用静态最终int BTN_计算=19;
专用静态最终int NUM_按钮=20;
私有静态最终int OP_MULT=0;
专用静态最终int OP_DIV=1;
专用静态最终整数OP_PLUS=2;
私有静态最终整数OP_减=3;
专用静态最终整数运算功率=4;
专用静态最终整数运算百分比=5;
私有静态字符[]buttonTexts={'7','8','9','/','4',
'5', '6', '*', '1', '2',
'3', '-', '0', '.', '^',

“+”、“C”、“%”、“框架有边框。如果操作正确,
pack
将尝试创建一个可视区域(框架边框内的空间),以匹配内容窗格的首选大小

与其担心框架的大小,不如让这两个组件和布局管理器自己决定

第一个值是图像面板/图像的大小,第二个值是窗口的大小

在调用
pack
之前,请确保始终调用
setresizeable

public class TestCalculator {

  public static void main(String[] args) {

        ImagePanel panel = new ImagePanel(new ImageIcon("01_Crane_AGweb.jpg").getImage());

        SimpleArithmeticCalculator calc = new SimpleArithmeticCalculator();

        JFrame frame = new JFrame("Simple Arithmetic Calculator");

        frame.setResizable(false);   

        frame.getContentPane().add(panel);

        frame.getContentPane().add(calc);

        **frame.setPreferredSize(new Dimension(343,343));**

        frame.pack();

        frame.setVisible(true);      

        **frame.setMinimumSize(new Dimension(343,371));**

        frame.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);

        panel.setVisible(true);

        panel.setOpaque(true);

        panel.add(calc);

        calc.SetColors(null , Color.white , new Color(72,61,139));

        calc.setVisible(true);

        calc.setOpaque(false);

}

}

class ImagePanel extends JPanel {

  private Image img;

  public ImagePanel(String img) {

    this(new ImageIcon(img).getImage());

  }

  public ImagePanel(Image img) {

    this.img = img;

    Dimension size = new Dimension(img.getWidth(null), img.getHeight(null));

    this.setPreferredSize(new Dimension(size));

    this.setMinimumSize(new Dimension(size));

    this.setMaximumSize(new Dimension(size));

    this.setSize(new Dimension(size));

    **this.setLayout(null);**

  }

    public void paintComponent(Graphics g) {

        super.paintComponent(g);

        g.drawImage(img, 0, 0, this.getWidth(),this.getHeight(),this);

    }

}
使用简单布局示例更新

import java.awt.Color;
import java.awt.Dimension;
import java.awt.FontMetrics;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Window;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;

public class TestCalculator {

    public static void main(String[] args) {
        ImagePanel panel = new ImagePanel(new ImageIcon("/path/to/image").getImage());
        JFrame frame = new JFrame("Simple Arithmetic Calculator");
        frame.getContentPane().add(panel);

        frame.setResizable(false);
        frame.pack();
        frame.setVisible(true);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }
}

class ImagePanel extends JPanel {

    private Image img;

    public ImagePanel(String img) {
        this(new ImageIcon(img).getImage());
    }

    public ImagePanel(Image img) {
        this.img = img;
        Dimension size = new Dimension(img.getWidth(null), img.getHeight(null));
    }

    public void paintComponent(Graphics g) {
        super.paintComponent(g);
        g.drawImage(img, 0, 0, this);
        g.setColor(Color.WHITE);
        FontMetrics fm = g.getFontMetrics();
        Window window = SwingUtilities.getWindowAncestor(this);
        int y = fm.getAscent();
        g.drawString(getWidth() + "x" + getHeight() + "; " + window.getWidth() + "x" + window.getHeight(), 0, y);
    }
}

你可以做一些更像

ImagePanel panel = new ImagePanel(new ImageIcon("01_Crane_AGweb.jpg").getImage());
SimpleArithmeticCalculator calc = new SimpleArithmeticCalculator();

JFrame frame = new JFrame("Simple Arithmetic Calculator");

frame.setResizable(false);   
// This is not going to come out well, as BorderLayout
// will only allow a single component to occupy the CenterPosition
frame.getContentPane().add(panel);
frame.getContentPane().add(calc);
frame.setPreferredSize(new Dimension(343,343));
// Now sized to the preferred size of the calc pane...
frame.pack();
frame.setVisible(true);      
frame.setMinimumSize(new Dimension(343,371));
frame.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
// Rather pointless as Swing components are visible by default...
panel.setVisible(true);
panel.setOpaque(true);
// This is now going to change the preferred size of the window...
panel.add(calc);
相反。。
frame.getContentPane().add(panel);           
frame.getContentPane().add(calc);
frame.setPreferredSize(new Dimension(358,379));
frame.pack();
...
panel.add(calc);
panel.setVisible(true);
calc.setVisible(true);