首页编程java编程java窗体事件处理属于什么模式,java 如何编写JFrame窗体右上角红色打叉关闭按钮的事件

java窗体事件处理属于什么模式,java 如何编写JFrame窗体右上角红色打叉关闭按钮的事件

编程之家2023-10-1287次浏览

很多朋友对于java窗体事件处理属于什么模式和java 如何编写JFrame窗体右上角红色打叉关闭按钮的事件不太懂,今天就由小编来为大家分享,希望可以帮助到大家,下面一起来看看吧!

java窗体事件处理属于什么模式,java 如何编写JFrame窗体右上角红色打叉关闭按钮的事件

Java编程,为什么唯一一个按钮布满整个窗体

问题不在于java,在于你没有了解java的GUI布局。

AWT和swing下的窗口(对话框)默认布局是BorderLayout,此时容器划分为上北、下南两个窄行,左西右东两个窄列,其余区域为中央。在将子部件添加到容器上时,如果指定了区域,会添加到对应的区域的,如:add(button,BorderLayout.SOUTH);如不指定区域,效果是所有未使用的区域将合并为一个区域,新添加的组件在此区域。正如你代码中的添加。

而在此布局下,南北行的高度是子部件自行决定的,就是说子部件高度不变,宽度将被缩放到容器相同的宽度;东西列的子部件宽度不变,高度被缩放到容器除南北行之外的高度;中央子部件的宽度高度都被缩放到容器除南北行东西列之外的宽度高度。

java窗体事件处理属于什么模式,java 如何编写JFrame窗体右上角红色打叉关闭按钮的事件

若想自己完全控制组件大小,则需要使用自定义布局,如别人的回答中的setLayout(null),不过必须在代码中手动设定每一个子部件的大小和位置,否则子部件使用默认大小0,0和位置0,0,子部件就看不见了。这种方法不推荐。一般是使用其它的布局。比如在窗口中对应区域加入面板,面板的默认布局是流式,将子部件加入到面板而不是窗口,这样保持了子部件的最适合大小。即:

Container c=getContentPane();

JPanel pan=new JPanel();

java窗体事件处理属于什么模式,java 如何编写JFrame窗体右上角红色打叉关闭按钮的事件

c.add(pan);

JButton button=new JButton("button");

pan.add(button);

另外,createJFrame方法的第一句根本没有用处,因为你的程序主类就是JFrame子类,当你的程序主类实例化时,JFrame已经潜在地实例化了,就不必另JFrame jf=new JFrame()了。

此时,你的程序主类实例就是一个JFrame,所以我给你的这些代码中getContentPane方法调用直接使用自身(父类JFrame)的方法:Container c=getContentPane();

java 如何编写JFrame窗体右上角红色打叉关闭按钮的事件

关闭时释放资源的调用

setDefaultCloseOperation

public void setDefaultCloseOperation(int operation)设置用户在此窗体上发起"close"时默认执行的操作。必须指定以下选项之一:

DO_NOTHING_ON_CLOSE(在 WindowConstants中定义):不执行任何操作;要求程序在已注册的 WindowListener对象的 windowClosing方法中处理该操作。

HIDE_ON_CLOSE(在 WindowConstants中定义):调用任意已注册的 WindowListener对象后自动隐藏该窗体。

DISPOSE_ON_CLOSE(在 WindowConstants中定义):调用任意已注册 WindowListener的对象后自动隐藏并释放该窗体。

EXIT_ON_CLOSE(在 JFrame中定义):使用 System exit方法退出应用程序。仅在应用程序中使用。

默认情况下,该值被设置为 HIDE_ON_CLOSE。更改此属性的值将导致激发属性更改事件,其属性名称为"defaultCloseOperation"。

注:当 Java虚拟机(VM)中最后一个可显示窗口被释放后,虚拟机可能会终止。有关更多信息,请参阅 AWT Threading Issues。

关闭窗口时触发的窗口事件:

JFrame对象.addWindowListener(new java.awt.event.WindowAdapter(){

public void windowClosing(java.awt.event.WindowEvent e){

System.out.println("windowClosing()");//要处理的事件}

});

java的一个窗体建立

我已发送邮件到你的邮箱,我的邮箱是fengxk2004@163.com

Java源程序附后。

本程序的特点是:

(1)文本框只能输入纯数字;

(2)界面较美观;

(3)代码可读性较好,有适当的注释;

(4)窗体一出现就在桌面居中。

import java.awt.*;

import java.awt.event.*;

import java.util.*;

import javax.swing.*;

public class GuessNumber{

private static final long serialVersionUID= 1L;

JFrame frame;

JTextField txtNum;//文本框

JButton btnStart;//按钮

JLabel lblPrompt;

JLabel lblMessage;

static int source= 0;

static Random rand= new Random();

public GuessNumber(){

frame= new JFrame("Guess Number");

JPanel pnl1, pnl2, pnl3, pnl4;

pnl1= new JPanel();

pnl1.setLayout(new FlowLayout(FlowLayout.LEFT));

pnl2= new JPanel();

pnl2.setLayout(new FlowLayout(FlowLayout.LEFT));

pnl3= new JPanel();

pnl3.setLayout(new FlowLayout(FlowLayout.LEFT));

pnl4= new JPanel();

pnl4.setLayout(new FlowLayout(FlowLayout.LEFT));

txtNum= new JTextField(10);

btnStart= new JButton("开始");

lblPrompt= new JLabel("<html><body>I have a number between 1 and 1000 can you guess my number?<br/>Please enter your first guess.</body></html>");

lblMessage= new JLabel();

pnl1.add(lblPrompt);

pnl2.add(txtNum);

pnl3.add(lblMessage);

pnl4.add(btnStart);

frame.setLayout(new GridLayout(4, 1));

frame.add(pnl1);

frame.add(pnl2);

frame.add(pnl3);

frame.add(pnl4);

txtNum.addActionListener(this.new TextAction());

txtNum.addKeyListener(this.new KeyAction());

btnStart.addActionListener(this.new ButtonAction());

frame.setSize(400, 200);

frame.setVisible(true);

frame.setLocationRelativeTo(null);

frame.setResizable(false);

}

public static void main(String[] args){

new GuessNumber();

while((source=rand.nextInt(1000))==0);

}

//按钮单击后的事件处理

class ButtonAction implements ActionListener{

@Override

public void actionPerformed(ActionEvent e){

JButton btn=(JButton)e.getSource();

if(btn== btnStart){

while((source=rand.nextInt(1000))==0);

txtNum.setEditable(true);

}

}

}

//文本框按回车后的事件处理

class TextAction implements ActionListener{

@Override

public void actionPerformed(ActionEvent e){

JTextField txt=(JTextField)e.getSource();

if(txt!= txtNum){

return;

}

int num= Integer.parseInt(txtNum.getText());

if(num== source){

lblMessage.setText("Correct!");

txtNum.setEditable(false);

txtNum.setBackground(frame.getBackground());

}

else if(num> source){

lblMessage.setText("Too High");

txtNum.setBackground(Color.red);

}

else{

lblMessage.setText("Too Low");

txtNum.setBackground(Color.blue);

}

}

}

//限制文本框只能输入数字

class KeyAction implements KeyListener{

@Override

public void keyPressed(KeyEvent e){

}

@Override

public void keyReleased(KeyEvent e){

}

@Override

public void keyTyped(KeyEvent e){

int k= e.getKeyChar();

String text=((JTextField)e.getSource()).getText();

if(!((k>47&& k<58)||(k==8|| k==KeyEvent.VK_PERIOD))){//限制只能输入数字

e.setKeyChar((char)KeyEvent.VK_CLEAR);

}

if(text.length()> 4){//限制数值的长度

e.setKeyChar((char)KeyEvent.VK_CLEAR);

}

}

}

}

java窗体事件处理属于什么模式和java 如何编写JFrame窗体右上角红色打叉关闭按钮的事件的问题分享结束啦,以上的文章解决了您的问题吗?欢迎您下次再来哦!

java里的$什么意思(JAVA 中$符号是什么意思)java 什么是域,java域是什么.