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