欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Java 搭建一个可交互的窗体程序

程序员文章站 2022-05-29 08:06:23
...

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

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

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

Java 搭建一个可交互的窗体程序

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

为窗体添加动作监听

在类名后声明接口

implements ActionListener //im act

为按键添加监听器

R.addActionListener(this);//adda this

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

Java 搭建一个可交互的窗体程序

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

在函数内部添加按钮分支

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

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

运行效果:

Java 搭建一个可交互的窗体程序

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

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);

自动添加

Java 搭建一个可交互的窗体程序

读取文件

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

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

Java 搭建一个可交互的窗体程序

Java 搭建一个可交互的窗体程序

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

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

文本读取

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

文本显示

text.setText(textString);//sett

效果:

Java 搭建一个可交互的窗体程序

写入

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

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

效果:

成功更改了文本内容

Java 搭建一个可交互的窗体程序

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();
	}
}

 

 

相关标签: Java