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