最近用网格袋布局,仿WINXP做一个计算器,出了一点问题,不知那个7怎么会跑上去!请各位指点!!

oldmoon 2005-03-19 05:32:05
如题!
程序如下:import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class JSQ extends JFrame
{
int i,j,k;
JPanel jp,jp2,jp3;
JMenuBar jm;
JMenu jme1,jme2,jme3;
JMenuItem jmi1,jmi2,jmi3,jmi4,jmi5,jmi6,jmi7;
JTextField jf;
JButton btn[]=new JButton[28];
String num[]={"NULL","Backspace","CE","C","MC","MR","MS","M+","7","8","9","/","sqrt","4","5","6","*","%","1","2","3","-","1/x","0","+/-",".","+","="};
void buildConstraints(GridBagConstraints gbc,int gx,int gy,int gw,int gh,int wx,int wy)
{
gbc.gridx=gx;
gbc.gridy=gy;
gbc.gridwidth=gw;
gbc.gridheight=gh;
gbc.weightx=wx;
gbc.weighty=wy;
}
public void PaiBan()
{

GridBagLayout gbg=new GridBagLayout();
GridBagConstraints constraints=new GridBagConstraints();
jp=new JPanel(gbg);
//jp2=new JPanel();
//jp3=new JPanel();
jm=new JMenuBar();
jme1=new JMenu("编辑(E)");
jmi1=new JMenuItem("复制");
jmi2=new JMenuItem("粘贴");
jme1.add(jmi1);
jme1.add(jmi2);
jme2=new JMenu("查看(V)");
jmi3=new JMenuItem("标准型");
jmi4=new JMenuItem("科学型");
jmi5=new JMenuItem("数学分组");
jme2.add(jmi3);
jme2.add(jmi4);
jme2.add(jmi5);
jme3=new JMenu("帮助(H)");
jmi6=new JMenuItem("帮助主题");
jmi7=new JMenuItem("关于计算器");
jme3.add(jmi6);
jme3.add(jmi7);
jm.add(jme1);
jm.add(jme2);
jm.add(jme3);
jf=new JTextField("0");
//btn[]=new JButton[28];
for (i=0;i<num.length;i++)
{
btn[i]=new JButton(num[i]);
}
buildConstraints(constraints,0,0,3,1,0,8);
constraints.fill=GridBagConstraints.NONE;
constraints.anchor=GridBagConstraints.WEST;
gbg.setConstraints(jm,constraints);
jp.add(jm);
buildConstraints(constraints,0,1,6,1,8,5);
constraints.fill=GridBagConstraints.BOTH;
//constraints.anchor=GridBagConstraints.EAST;
gbg.setConstraints(jf,constraints);
jp.add(jf);
for(i=0;i<4;i++)
{
buildConstraints(constraints,i,2,1,1,0,8);
constraints.fill=GridBagConstraints.NONE;
constraints.anchor=GridBagConstraints.WEST;
gbg.setConstraints(btn[i],constraints);
jp.add(btn[i]);
}
for(i=3,j=4;i<8;i++,j++)
{
buildConstraints(constraints,0,i,1,1,16,5);
constraints.fill=GridBagConstraints.NONE;
constraints.anchor=GridBagConstraints.WEST;
gbg.setConstraints(btn[j],constraints);
jp.add(btn[j]);
}

for(i=3,j=8,k=1;j<num.length;j++,k++)
{
buildConstraints(constraints,k,i,1,1,0,0);
constraints.fill=GridBagConstraints.NONE;
constraints.anchor=GridBagConstraints.CENTER;
gbg.setConstraints(btn[j],constraints);
jp.add(btn[j]);
if(k%6==0)
{i++;k=1;}
}
setContentPane(jp);
//jp.setJMenuBar(jm);
}
public static void main(String arg[])
{
JSQ jsq=new JSQ();
jsq.PaiBan();
jsq.setTitle("计算器");
jsq.setSize(500,500);
jsq.show();
jsq.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}


...全文
136 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
oldmoon 2005-03-21
  • 打赏
  • 举报
回复
谢谢!
yagumo 2005-03-20
  • 打赏
  • 举报
回复
setIconImage(Toolkit.getDefaultToolkit().getImage("icon.gif"));
setResizable(false);
oldmoon 2005-03-20
  • 打赏
  • 举报
回复
谢谢!!!
XYLayout,没用过!
顺便问一下,如果我要禁用那个放大窗口应该用什么方法?我要把JFrame窗口中的那杯咖啡去掉,用上自己的图片不知道有什么办法?
yagumo 2005-03-19
  • 打赏
  • 举报
回复
上面那个算错了行,我发觉了,但是一个ID只能连续发三个回帖,所以没能更正.
你如果想完全仿xp的计算器,那用XYLayout可能是最方便的.
setPreferredSize的意思是设置控件的最佳尺寸,为了使按钮大小统一而做的.
oldmoon 2005-03-19
  • 打赏
  • 举报
回复
TO: yagumo(八云)
我试过我的,好象离,WINXP那样的界面相差很大,而且如果那样的话,我只要有GridLayout就可以实现了,现在我是想做一个和WINXP比较接近的界面!
oldmoon 2005-03-19
  • 打赏
  • 举报
回复
TO: yagumo(八云)
座标是[0,3],0应该是代表X轴上的0吧,3应该是代表Y轴下的3所以,说这个挤跑了,好象说不通!!

btn[i].setPreferredSize(new Dimension(100, 30));这个是什么意思??
yagumo 2005-03-19
  • 打赏
  • 举报
回复
还有你的"7"跑上去的原因,分析这一段
for(i=3,j=8,k=1;j<num.length;j++,k++) {
buildConstraints(constraints,k,i,1,1,0,0);
constraints.fill=GridBagConstraints.NONE;
constraints.anchor=GridBagConstraints.CENTER;
gbg.setConstraints(btn[j],constraints);
jp.add(btn[j]);
if(k%6==0) {
i++;
k=1;
}
}
"7"是btn[8],相当于执行了
buildConstraints(constraints,0,3,1,1,0,0);
即它的座标是[0,3],而0行上已经有个JTextField在前面横起了,所以你的"7"就被挤跑了.
yagumo 2005-03-19
  • 打赏
  • 举报
回复
最上面一排的"NULL", "Backspace", "CE", "C"和下面的长度个数都不一样,可以考虑用个Box组在一起然后塞进去.
yagumo 2005-03-19
  • 打赏
  • 举报
回复
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class JSQ extends JFrame {
int i, j, k;
JPanel jp, jp2, jp3;
JMenuBar jm;
JMenu jme1, jme2, jme3;
JMenuItem jmi1, jmi2, jmi3, jmi4, jmi5, jmi6, jmi7;
JTextField jf;
String num[] = {"NULL", "Backspace", "CE", "C","","",
"MC", "7", "8", "9", "/", "sqrt",
"MR", "4", "5", "6", "*", "%",
"MS", "1", "2", "3", "-", "1/x",
"M+", "0", "+/-", ".", "+", "="};
JButton btn[] = new JButton[num.length];
void buildConstraints(GridBagConstraints gbc, int gx, int gy, int gw, int gh, int wx, int wy) {
gbc.gridx = gx;
gbc.gridy = gy;
gbc.gridwidth = gw;
gbc.gridheight = gh;
gbc.weightx = wx;
gbc.weighty = wy;
}

public void PaiBan() {

GridBagLayout gbg = new GridBagLayout();
GridBagConstraints constraints = new GridBagConstraints();
jp = new JPanel(gbg);
//jp2=new JPanel();
//jp3=new JPanel();
jm = new JMenuBar();
jme1 = new JMenu("编辑(E)");
jmi1 = new JMenuItem("复制");
jmi2 = new JMenuItem("粘贴");
jme1.add(jmi1);
jme1.add(jmi2);
jme2 = new JMenu("查看(V)");
jmi3 = new JMenuItem("标准型");
jmi4 = new JMenuItem("科学型");
jmi5 = new JMenuItem("数学分组");
jme2.add(jmi3);
jme2.add(jmi4);
jme2.add(jmi5);
jme3 = new JMenu("帮助(H)");
jmi6 = new JMenuItem("帮助主题");
jmi7 = new JMenuItem("关于计算器");
jme3.add(jmi6);
jme3.add(jmi7);
jm.add(jme1);
jm.add(jme2);
jm.add(jme3);
jf = new JTextField("0");
//btn[]=new JButton[28];
for (i = 0; i < num.length; i++) {
btn[i] = new JButton(num[i]);
btn[i].setPreferredSize(new Dimension(100, 30));
}
setJMenuBar(jm);
buildConstraints(constraints, 0, 0, 6, 1, 0, 0);
constraints.fill = GridBagConstraints.BOTH;
//constraints.anchor=GridBagConstraints.EAST;
gbg.setConstraints(jf, constraints);
jp.add(jf);
// for (i = 0; i < 4; i++) {
// buildConstraints(constraints, i, 1, 1, 1, 0, 0);
// constraints.fill = GridBagConstraints.NONE;
// constraints.anchor = GridBagConstraints.WEST;
// gbg.setConstraints(btn[i], constraints);
// jp.add(btn[i]);
// }
for (i = 0; i < num.length; i++) {
buildConstraints(constraints, i % 6 , ((int)(i / 6)) + 1, 1, 1, 0, 0);
constraints.fill = GridBagConstraints.NONE;
constraints.anchor = GridBagConstraints.CENTER;
gbg.setConstraints(btn[i], constraints);
jp.add(btn[i]);
}
setContentPane(jp);
}

public static void main(String arg[]) {
JSQ jsq = new JSQ();
jsq.PaiBan();
jsq.setTitle("计算器");
jsq.pack();
jsq.show();
jsq.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
Visual Studio Code 是由微软开发的一款免费、开源、跨平台的现代化轻量级代码编辑器,自发布以来迅速成为全球开发者最受欢迎的工具之一。它结合了编辑器的轻便性和集成开发环境(IDE)的强大功能,支持多种编程语言和开发场景,核心特点: 1. 跨平台支持 可在 Windows、macOS 和 Linux 上运行,保持一致的用户体验。 2. 轻量级与高性能 启动速度快,占用资源少,适合处理大型项目或低配置设备。 3. 智能代码补全 内置 IntelliSense(智能感知),提供代码提示、参数信息、快速修复等功能,支持 JavaScript、TypeScript、Python、C++ 等主流语言。 4. 内置终端 直接在编辑器内打开集成终端(支持 PowerShell、CMD、Bash 等),方便执行命令行操作。 5. 调试工具 内置调试器,支持断点、变量监视、调用堆栈查看等,无需离开编辑器即可调试代码。 6. Git 集成 直接通过侧边栏管理 Git 仓库,支持提交、分支切换、冲突解决等操作。 7. 丰富的扩展生态系统 通过 Extensions Marketplace 可安装数千款插件,扩展功能包括: 语言支持:如 Java、Go、Rust 等。 主题与图标:自定义界面风格。 工具集成:如 Docker、Kubernetes、数据库连接等。 效率工具:如 REST Client、Live Server 等。 8. 自定义与主题 支持修改键盘快捷键、界面主题、文件图标等,打造个性化开发环境。 9. 多光标编辑 按住 Alt(Windows/Linux)或 Option(macOS)点击可添加多个光标,同时编辑多处代码。 10. 远程开发支持 通过 Remote - SSH、Remote - Containers 等扩展,可直接连接远程服务器或开发容器,实现无缝协作。

62,634

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧