Java 搭建一个可交互的窗体程序_java窗体程序的主程序-程序员宅基地

技术标签: Java  

简单地显示一个窗口所需的最少代码

import javax.swing.JFrame;

public class main {

	static class Win extends JFrame{//static不能少
		Win()
		{
			setVisible(true);//setv
		}
	}
	
	public static void main(String[] args) {
		// TODO 
		new Win();
	}
}

报错:No enclosing instance of type is accessible. Must qualify the allocation with an enclosing

解决方案一:

主程序是public static class main

在Java中,类中的静态方法不能直接调用动态方法。

静态main方法中只能调用静态类

在调用类前加static可解决

解决方案二(本质):不小心把窗体类写成了主类的内部类,应该写成外部类才对,这样就不用static了

import javax.swing.JFrame;

class Win extends JFrame{
		Win()
		{
			setVisible(true);//setv
		}
	}

public class main {
	public static void main(String[] args) {
		// TODO 
		new Win();
	}
}

显示一个单行文本框

类中

JTextArea path=new JTextArea();//JTA

构造函数中

add(path);

不可以使用path.add();

当有两个控件的时候,必须使用中间容器装载,不然有一个看不见

类中

JPanel top=new JPanel();//JPA

构造函数中

add(top);
top.setLayout(new GridLayout(2,1));//setl+gri
top.add(path);
top.add(text);

优化布局

一、将容器top放置于整个窗体的北区

add(top,BorderLayout.NORTH);//bord

二、将Text放置于容器Centre内部,Centre使用网格布局,仅有一行一列

类中

JPanel centre= new JPanel();

构造函数中

centre.setLayout(new GridLayout(1,1));

centre.add(text);

三、在容器top内部相对文本框的下方增加一个按钮栏bp,栏中存放按钮R

类中

JPanel bp=new JPanel();

构造函数中

top.add(bp,BorderLayout.CENTER);//若文本框指定了位置NORTH,按钮栏则不必指定位置Centre
bp.setLayout(new GridLayout(1,2));//一行两列
bp.add(R);

四、设置窗体位置、大小、标题和关闭方式

setLocation(400, 100);//setl

setTitle("文件读写");//sett

setSize(300, 200);//sets
setDefaultCloseOperation(EXIT_ON_CLOSE);//setd

这样,一个简易的窗体界面就布置好了

但是,这个界面目前只能看,没有交互

为窗体添加动作监听

在类名后声明接口

implements ActionListener //im act

为按键添加监听器

R.addActionListener(this);//adda this

在报错处自动添加动作实施函数

    public void actionPerformed(ActionEvent e) {
        // TODO 自动添加
        
    }

在函数内部添加按钮分支

Object s=e.getSource();//Object e.gets

if(s==R)
 {
            System.out.println("按下了读入键");
 }

运行效果:

这样,一个可交互的窗体就建立好了~

import java.awt.BorderLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextArea;
import javax.swing.JTextField;

class Win extends JFrame implements ActionListener//im act
{
	JTextArea path=new JTextArea();//JTA
	JTextField text=new JTextField();//JTF
	JPanel top=new JPanel();//JPA
	JPanel centre= new JPanel();
	JPanel bp=new JPanel();
	JButton R=new JButton("读入");//JB
	Win()
	{
		add(top,BorderLayout.NORTH);//bord
		add(centre,BorderLayout.CENTER);
		top.setLayout(new GridLayout(2,1));//setl+gri
		centre.setLayout(new GridLayout(1,1));
		top.add(path,BorderLayout.NORTH);
		top.add(bp,BorderLayout.CENTER);
		bp.setLayout(new GridLayout(1,2));
		bp.add(R);
		centre.add(text);
		
		R.addActionListener(this);//adda this
		
		setLocation(400, 100);//setl
		setSize(300, 200);//sets
		setTitle("文件读写");//sett
		setDefaultCloseOperation(EXIT_ON_CLOSE);//setd
		setVisible(true);//setv
	}
	public void actionPerformed(ActionEvent e) {
		// TODO 自动添加
		Object s=e.getSource();
		if(s==R)
		{
			System.out.println("按下了读入键");
		}
	}
}


public class main {

	public static void main(String[] args) {
		// TODO 
		new Win();
	}
}

读写文件

获取路径

String pathString=path.getText();//gett

获取文件

File file=new File(pathString);

自动添加

读取文件

FileReader fileReader=new FileReader(file);//filer

有如下提示,则在动作实施函数中添加trycatch、将所有if语句丢进去

缓冲器内容读取(考试的时候、变量命名可以用自动的,节省时间)

BufferedReader bufferedReader=new BufferedReader(fileReader);//bu

文本读取

String line="";
String textString="";
while((line=bufferedReader.readLine())!=null)
{
         textString=textString+line+"\n";
}

文本显示

text.setText(textString);//sett

效果:

写入

FileWriter fileWriter=new FileWriter(file);//filew

fileWriter.write(text.getText());
fileWriter.close();

效果:

成功更改了文本内容

import java.awt.BorderLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextArea;
import javax.swing.JTextField;

class Win extends JFrame implements ActionListener//im act
{
	JTextArea path=new JTextArea();//JTA
	JTextField text=new JTextField();//JTF
	JPanel top=new JPanel();//JPA
	JPanel centre= new JPanel();
	JPanel bp=new JPanel();
	JButton R=new JButton("读入");//JB
	JButton W=new JButton("写入");
	Win()
	{
		add(top,BorderLayout.NORTH);//bord
		top.setLayout(new GridLayout(2,1));//setl+gri
		top.add(path,BorderLayout.NORTH);
		top.add(bp);
		bp.setLayout(new GridLayout(1,2));
		bp.add(R);
		bp.add(W);
		
		add(centre,BorderLayout.CENTER);
		centre.setLayout(new GridLayout(1,1));
		centre.add(text);
		
		R.addActionListener(this);//adda this
		W.addActionListener(this);//adda this
		
		setLocation(400, 100);//setl
		setSize(300, 200);//sets
		setTitle("文件读写");//sett
		setDefaultCloseOperation(EXIT_ON_CLOSE);//setd
		setVisible(true);//setv
	}
	public void actionPerformed(ActionEvent e) {
		// TODO 自动添加
		Object s=e.getSource();
		try {
			if(s==R)
			{
				System.out.println("按下了读入键");
				String pathString=path.getText();//gett
				File file=new File(pathString);
				FileReader fileReader=new FileReader(file);//filer
				BufferedReader bufferedReader=new BufferedReader(fileReader);//bu
				String line="";
				String textString="";
				while((line=bufferedReader.readLine())!=null)
				{
					textString=textString+line+"\n";
				}
				text.setText(textString);//sett
			}
			if(s==W)
			{
				String pathString=path.getText();//gett
				File file=new File(pathString);
				FileWriter fileWriter=new FileWriter(file);//filew
				fileWriter.write(text.getText());
				fileWriter.close();
			}
		} catch (Exception e2) {
			// TODO: handle exception
		}
	}
}


public class main {

	public static void main(String[] args) {
		// TODO 
		new Win();
	}
}

 

 

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_43673589/article/details/111355434

智能推荐

Flutter备忘录: 《State----之浅析理解StatefulWidget、BuildContext、StatefulElement与生命周期的关系》_flutter kfluttermemoryallocationsenabled-程序员宅基地

文章浏览阅读125次。编码片断部分判断了 _element == null (element 元素),这里比较好理解,如果bool return false 那么就说明“承载state上下文的widget不存在”那么,就没有继续下去的必要了.大意说,State这个对象关联着上下文,既然是StatefulWidget,那么势必会进行State[状态|行为]上下文关联操作,比如,A,B两个页面互相传递参数等等。抛砖引玉: 为什么在TabNavigator中必须要重写(@override)State中的createState()?_flutter kfluttermemoryallocationsenabled

matlab图论模型和算法_matlab网络中心度-程序员宅基地

文章浏览阅读3.4k次,点赞3次,收藏37次。图论算法简介图论起源于哥尼斯堡七桥问题要求从以点出发走过所有的路径。图论 (Graph theory) 以图为研究对象, 研究顶点和边组成的图形的数学理论和方法。图论中的图是由若干给定的顶点及连接两顶点的边所构成的图形。图论中的图通常用来描述某些事物之间的某种特定关系,用顶点代表事物,用边表示相应两个事物间的关系。概念、算法图(无向图)的构成图的构成: 顶点集 边集 关联函数顶点集V(G): 图G中所有顶点的集合边集E(G): 图G中所有边的集合关联函数φG: φG:E(G)→V_matlab网络中心度

android之res里面的drawable(ldpi、mdpi、hdpi、xhdpi、xxhdpi)_drawable-hdpi-程序员宅基地

文章浏览阅读1.5k次,点赞2次,收藏5次。(1)drawable-hdpi里面存放高分辨率的图片,如WVGA (480x800),FWVGA (480x854)  (2)drawable-mdpi里面存放中等分辨率的图片,如HVGA (320x480)  (3)drawable-ldpi里面存放低分辨率的图片,如QVGA (240x320) ldpi:240x320 ..._drawable-hdpi

style标签在body前后的区别_style写在body前后的区别-程序员宅基地

文章浏览阅读506次,点赞10次,收藏12次。由于浏览器以逐行方式对html文档进行解析,DOM 和 CSSOM 两者又是并行的构建的,然后两者结合形成 Render Tree后渲染页面,页面渲染又依赖于CSS的加载,放在body前会跟HTML同时渲染,放在body后,浏览器会先渲染HTML,再渲染CSS,则会导致一开始出现一个没有样式的界面,再跳到有样式的界面。注意:发起js文件的下载request并不需要DOM处理到那个script节点,比如:简单的正则匹配就能做到这一点,虽然实际上并不一定是通过正则。_style写在body前后的区别

产品经理必须要了解的26个文档-程序员宅基地

文章浏览阅读49次。产品经理必须要了解的26个文档现在产品部只有四个人,并且也经过了一段时间的磨合,每个人的性格特点大概了解得差不多了。周扬,爱学习,思维缜密,有毅力,善于总..._产品经理上市文档

Simulink代码生成: 调用Matlab函数_simulink能调用matlab函数吗-程序员宅基地

文章浏览阅读2.6w次,点赞27次,收藏253次。本文研究Simulink模型中调用Matlab函数的方法。文章目录1 Matlab Function模块2 建模与代码生成3 Matlab Function中的数据管理3.1 关联Signal对象3.2 建立函数内的参数4 Matlab Function生成代码的限制5 总结1 Matlab Function模块在Simulink中建模的时候,有时会发现自己想要的功能无法通过Simulink中常规的模块和子系统实现,但是通过Matlab函数却可以很容易地实现。又或者说,通过Matlab可以调用一些工具_simulink能调用matlab函数吗

随便推点

JAVA-练习-throws和throw抛出异常_throw new userexception(-98, -1104-程序员宅基地

文章浏览阅读510次。1.throwsthrows抛出异常,通常是在类的声明阶段,代表声明的异常抛出,但不进行处理;当程序员不能处理出可能出现的异常时,就需要在方法声明阶段声明异常,那么在后续出现异常的情况下就能够知道异常的情况避免了出现异常却不知道具体异常的情况代码示例如下:注意 在方法声明异常时需要在调用其的方法也声明异常如代码中match2中声明了异常,main中也需要声明异常public class testDemo { private static String userName ="char_throw new userexception(-98, -1104

linux 常用命令大全及其详解_Linux(Vim常用命令大全)-程序员宅基地

文章浏览阅读113次。前言:当你想高效率的写SHELL脚本时,熟悉Vim命令可以帮你节省不少时间~!Vim是Vi的进化版,Vim可以用颜色或者下划线的方式来显示一些特殊的信息,例如C语言中的库函数,以及一些内置函数都能带有特殊的颜色~废话不多说,开搞!众所周知,Vim有三种模式:一般命令模式,编辑模式与命令模式:命令模式:当你使用vim打开文件时,就属于命令模式..._vim 常用命令大全及其详解

机器学习----贝叶斯分类器(判别模型和生成模型)_贝叶斯 生成式模型-程序员宅基地

文章浏览阅读2.3k次。判别模型和生成模型数学表述监督学习方法分 判别方法(Discriminative Approach) 和 生成方法(Generative Approach),所学到的模型分别称为 判别模型(Discriminative Model) 和 生成模型(Generative Model)。所谓判别模型模型是直接判别测试用例所属的类别,即直接对p(y|x)p(y|x)进行建模,例如logistic regr_贝叶斯 生成式模型

关于5G最完整的PPT-程序员宅基地

文章浏览阅读313次,点赞2次,收藏2次。导读:该PPT作者为王喜文。王喜文博士是国内第一本“工业4.0”方面专著的作者,这个课件是王喜文博士给地方政府和企业家讲座的完整内容,通过对5G、人工智能、智能制造等未来科技的分享,希望有助于大家拓展思路、开拓视野。 ..._5g频段 ppt

SpringBoot 优雅的配置拦截器方式-程序员宅基地

文章浏览阅读167次。来源:my.oschina.net/bianxin/blog/2876640其实spring boot拦截器的配置方式和springMVC差不多,只有一..._path.matches(url)

Eclipse RCP插件开发【1.插件介绍】-程序员宅基地

文章浏览阅读1.1k次,点赞18次,收藏21次。扩展点是 Eclipse RCP(Rich Client Platform)中用于定义产品的扩展点。产品定义了一个独立的、可分发的 Eclipse 应用程序。通过定义产品,你可以配置应用程序的名称、图标、启动特性、插件等属性。以下是扩展点中这些属性和元素定义了 Eclipse RCP 产品的一些关键特征,包括产品的标识、名称、启动应用程序、描述、图标、版本等。通过定义产品,你可以配置和分发独立的 Eclipse 应用程序。_eclipse rcp

推荐文章

热门文章

相关标签