一: 首先弄清題目的意思
成都創(chuàng)新互聯(lián)公司-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設(shè)、高性價比福綿網(wǎng)站開發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫,直接使用。一站式福綿網(wǎng)站制作公司更省心,省錢,快速模板網(wǎng)站建設(shè)找我們,業(yè)務(wù)覆蓋福綿地區(qū)。費用合理售后完善,十余年實體公司更值得信賴。
A.需要的主要組件列表:
1. ?創(chuàng)建一個窗口,窗口標題叫Information
2. ?3個標簽, 用于顯示文字 Name Number Class
3. ?3個文本框, 用于填寫信息
4. ?1個按鈕, ?文字是確認
5. ?1個文本域
B.業(yè)務(wù)邏輯
1. 當點擊按鈕確認的時候, 把 文本框的信息顯示到文本域
C.設(shè)計的主要技術(shù)
JLabel , JButton, JTextField ...等, 都是swing的組件 , ?所以應(yīng)該使用swing進行創(chuàng)建
二: ?確定使用的布局
swing雖然重寫了大部分的組件, 但是布局, 依舊沿襲awt技術(shù)
分析圖片上的布局:
至少有2種方法可以實現(xiàn),?
方法一: 絕對布局 , 優(yōu)點: ?配合可視化GUI拖曳, 可以完美的實現(xiàn)圖上的組件的位置
但是缺點也是致命的, 不同的操作系統(tǒng)平臺下, 可能會出現(xiàn)位置的移動,
只適合開發(fā)平臺, 移植效果差 . ?所以不推薦使用
方法二: 靈活的表格布局, 配合流式布局 , 所有操作系統(tǒng)下,顯示效果都比較統(tǒng)一.?
三: 效果圖
四: 參考代碼
import?java.awt.*;
import?java.awt.event.*;
import?javax.swing.*;
public?class?FrameDemo?extends?JFrame?{
//申明需要的組件
private?final?JTextField?jtf1,jtf2,jtf3;
private?final?JTextArea?jta;
public?FrameDemo()?{
setTitle("Information");//設(shè)置窗口標題
setSize(320,?360);//設(shè)置窗口大小
setLocationRelativeTo(null);//設(shè)置窗口居中
setDefaultCloseOperation(EXIT_ON_CLOSE);//設(shè)置關(guān)閉時退出虛擬機
getContentPane().setLayout(new?FlowLayout());//設(shè)置窗口布局為流式布局
JPanel?jp?=?new?JPanel(new?GridLayout(4,?2));//設(shè)置jp面板為表格布局4行2列
//第一行
JPanel?jp01?=?new?JPanel();
JLabel?jl1?=?new?JLabel("Name:");
jp01.add(jl1);
JPanel?jp1?=?new?JPanel();
jtf1?=?new?JTextField(8);
jp1.add(jtf1);
//第二行
JPanel?jp02?=?new?JPanel();
JLabel?jl2?=?new?JLabel("Number:");
jp02.add(jl2);
JPanel?jp2?=?new?JPanel();
jtf2?=?new?JTextField(8);
jp2.add(jtf2);
//第三行
JPanel?jp03?=?new?JPanel();
JLabel?jl3?=?new?JLabel("Class:");
jp03.add(jl3);
JPanel?jp3?=?new?JPanel();
jtf3?=?new?JTextField(8);
jp3.add(jtf3);
//第四行
JPanel?jp04?=?new?JPanel();
JLabel?jl4?=?new?JLabel("");
jp04.add(jl4);
JPanel?jp4?=?new?JPanel();
JButton?jb?=?new?JButton("確認");
jp4.add(jb);
jp.add(jp01);
jp.add(jp1);
jp.add(jp02);
jp.add(jp2);
jp.add(jp03);
jp.add(jp3);
jp.add(jp04);
jp.add(jp4);
getContentPane().add(jp);
jta?=?new?JTextArea();
jta.setColumns(20);//設(shè)置文本域的大小
jta.setEditable(false);//設(shè)置文本域不可編輯
jta.setBackground(jp.getBackground());//設(shè)置文本域的背景色和面板一樣
getContentPane().add(jta);
jb.addActionListener(new?ActionListener()?{//給按鈕添加事件
public?void?actionPerformed(ActionEvent?e)?{//點擊按鈕,顯示信息到文本域
String?name?=?jtf1.getText();
String?number?=?jtf2.getText();
String?clazz?=?jtf3.getText();
jta.setText("You?name?is?"+name+"?number?is?"+number+"?class?is?"+clazz);
}
});
}
public?static?void?main(String[]?args)?{
new?FrameDemo().setVisible(true);//創(chuàng)建窗口,被設(shè)置為可見
}
}
五: 拓展
雖然圖形界面的實現(xiàn)方法是多樣的, ?我們一定要根據(jù)具體情況, 選擇一個比較優(yōu)化的 合理的, 符合業(yè)務(wù)邏輯的實現(xiàn)方法
import java.awt.*;
import javax.swing.*;
public class MyFrame extends JFrame{
/**
*
*/
private static final long serialVersionUID = 1L;//序列號
protected JLabel pLabel;//聲明一個標簽
protected JTextField tf;//聲明一個文本框
protected JTextArea ta;//聲明一個文本域(多行文本框)
protected JButton btn1,btn2;//聲明一個按鈕
public MyFrame(String s){//構(gòu)造方法
super(s);//繼承父類的構(gòu)造方法并把值是傳給他
Container contentPane=getContentPane();//獲得一個容器
contentPane.setLayout(new BorderLayout());//設(shè)置容器的布局(流式布局)
JPanel ptf=new JPanel(new GridLayout(1,2));//創(chuàng)建一個面板
pLabel=new JLabel("請輸入",JLabel.RIGHT);//創(chuàng)建一個標簽
ptf.add(pLabel);//向面板里添加一個標簽
tf=new JTextField(12);//創(chuàng)建一個文本框
ptf.add(tf);//添加到面板里
contentPane.add(ptf,BorderLayout.NORTH);//將面板添加到容器的北方
ta=new JTextArea("這是一個文本區(qū)");//創(chuàng)建一個文本域
JScrollPane scrollpane=new JScrollPane(ta);//創(chuàng)建一個滾動條并添加到文本域
contentPane.add(scrollpane,BorderLayout.CENTER);//將文本域添加到容器
JPanel pbtn=new JPanel();//創(chuàng)建面板
btn1=new JButton("按鈕1");//創(chuàng)建按鈕
pbtn.add(btn1);//添加到面板
btn2=new JButton("按鈕2");
pbtn.add(btn2);
contentPane.add(pbtn,BorderLayout.SOUTH);//將面板添加到容器的南方
setSize(400,300);//設(shè)置大小
setVisible(true);//設(shè)置是否可見
}
public static void main(String []args){//主函數(shù)
MyFrame w =new MyFrame("應(yīng)用程序");//實例化MyFrame
}
}
第二個
import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JColorChooser;
public class MyFrame2 extends MyFrame implements ActionListener{
public MyFrame2(String s){//這個代構(gòu)造方法是在該類實例化的時候為下面三個控件添加監(jiān)聽器
super(s);
tf.addActionListener(this);
btn1.addActionListener(this);
btn2.addActionListener(this);
}
@Override
public void actionPerformed(ActionEvent e) {//添加事件的方法
if(e.getSource()==tf){
ta.append("\n"+tf.getText());
tf.setText("");
}
else if(e.getSource()==btn1){
Color tempColor=JColorChooser.showDialog(this,"調(diào)色板",Color.red);
ta.setBackground(tempColor);
}
else if(e.getSource()==btn2){
Color tempColor=JColorChooser.showDialog(this,"調(diào)色板",Color.red);
ta.setForeground(tempColor);
}
}
public static void main(String []args){
MyFrame2 w=new MyFrame2("窗口應(yīng)用程序");
}
}
import?java.awt.*;
import?java.awt.event.*;
import?java.io.*;
import?javax.swing.*;
public?class?ReadBook?extends?JFrame?{
JTextArea?jta;
JTextField?jtf;
JButton?jb;
public?ReadBook()?{
jta?=?new?JTextArea();
jtf?=?new?JTextField(30);
jtf.setText("文件保存路徑如c:\\ab.txt");
jb?=?new?JButton("保存文字");
JPanel?jp?=?new?JPanel();
jp.add(jtf);
jp.add(jb);
add(jta);
add(jp,?BorderLayout.SOUTH);
setBounds(500,?100,?500,?380);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
jb.addActionListener(new?ActionListener()?{
@Override
public?void?actionPerformed(ActionEvent?e)?{
//-------------核心代碼---------
String?path?=?jtf.getText();
File?f?=?new?File(path);
String?txt?=?jta.getText().replaceAll("\n",?"\r\n");
try?{
BufferedWriter?bw?=?new?BufferedWriter(new?FileWriter(f));
bw.write(txt);//寫入文件中
bw.close();
}?catch?(Exception?e1)?{
e1.printStackTrace();
}
//-------------核心代碼---------
}
});
}
public?static?void?main(String[]?args)?{
new?ReadBook();
}
}
import?java.awt.*;
import?java.awt.event.*;
import?javax.swing.*;
public?class?JListDemo?extends?JFrame?{
private JPanel topPanel;
private JList listbox;
public?JListDemo(){
setTitle(?"Simple?ListBox?Application"?);
setSize(?300,?100?);
setBackground(?Color.gray?);
topPanel?=?new?JPanel();
topPanel.setLayout(?new?BorderLayout()?);
getContentPane().add(?topPanel?);
String listData[]?=
{
"Item?1",
"Item?2",
"Item?3",
"Item?4"
};
listbox?=?new?JList(?listData?);
topPanel.add(?listbox,?BorderLayout.CENTER?);
}
public?static?void?main(?String?args[]?)?{
JListDemo?mainFrame =?new?JListDemo();
mainFrame.setVisible(?true?);
}
}