Java基礎 實驗八 圖形使用者介面(文末送彩蛋)
阿新 • • 發佈:2019-01-13
一、實驗內容
1)程式設計:建立有一個文字框和三個按鈕的小程式。當按下每個按鈕時,使不同的文字顯示在文字框中。
2)程式設計:建立一使用者登入介面,接受使用者輸入的帳號和密碼,給三次輸入機會。
3)程式設計:編寫成人標準身高和體重互查的程式。身高和體生在兩個不同的文字框中輸入,要求輸入一個。輸入身高則輸出體重,輸入體重則輸出身高。用一個按鈕啟動互查。互查的公式為: 體重=身高-100。
4)程式設計:建立三個JSlider滾動條和一個JLabel標籤物件,滾動條用來調整紅、綠、藍三色的比例,每個滾動條加標題邊界、設定刻度 自定)和標註。當拖動滑塊修改三色比例時,變化標籤的背景色。
5)程式設計:建立一個文字框、三個單選按鈕、一個標籤和一個按鈕,文字框用來輸入自然數N,根據選擇單選按鈕的不同,分別計算:1+2+…N或1*2*…N或1+1/2+1/3+…1/N,計算結果在標籤中顯示。
二、實驗程式碼
1、OneQuestion.java
package exceptioneight; import java.awt.Container; import java.awt.FlowLayout; import static java.awt.FlowLayout.CENTER; import java.awt.Font; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.BoxLayout; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JTextArea; import javax.swing.JTextField; import javax.swing.WindowConstants; /** * * @author 31621 */ public class OneQuestion extends JFrame{ private JPanel panel = new JPanel(); private JPanel pane = new JPanel(); private JTextArea textArea = new JTextArea(5, 30);//指定初始文字和寬度 private JButton textOne = new JButton("文字一"); private JButton textTwo = new JButton("文字二"); private JButton textThree = new JButton("文字三"); public OneQuestion() { super("顯示不同文字"); //setBounds(600, 400, 500, 200); setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);//關閉視窗,不結束程式 BoxLayout box = new BoxLayout(this.getContentPane(), BoxLayout.Y_AXIS); setLayout(box);//容器佈局為:方框垂直佈局 //控制元件屬性 panel.setLayout(new FlowLayout(CENTER)); pane.setLayout(new FlowLayout(CENTER)); textArea.setEditable(false);//文字框不可編輯 textArea.setLineWrap(true); textArea.setText(" Hello world!"); //事件 textOne.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent evt) { textArea.setText("文字一111111111111"); } }); textTwo.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent evt) { textArea.setText("文字二2222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222"); } }); textThree.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent evt) { textArea.setText("文字三33333333333333"); } }); //佈局 panel.add(textArea); pane.add(textOne); pane.add(textTwo); pane.add(textThree); add(panel); add(pane); pack(); setLocation(720, 260); setVisible(true); } }
2、TwoQuestion.java
package exceptioneight; import java.awt.FlowLayout; import static java.awt.FlowLayout.CENTER; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.BoxLayout; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.JPasswordField; import javax.swing.JTextField; /**問題二: * 建立一使用者登入介面,接受使用者輸入的帳號和密碼,給三次輸入機會。 */ public class TwoQuestion extends JFrame{ private int count = 3;//記錄登入的次數 private JLabel jl1 = new JLabel("使用者名稱:"); private JLabel jl2 = new JLabel(" 密碼 :"); private JTextField jtf1 = new JTextField(16); private JPasswordField jpf1 = new JPasswordField(16); private JButton jb1 = new JButton("登入"); private JPanel jp1 = new JPanel(); private JPanel jp2 = new JPanel(); private FlowLayout fl1 = new FlowLayout(CENTER); private BoxLayout bl1 = new BoxLayout(this.getContentPane(), BoxLayout.Y_AXIS); public TwoQuestion() { super("登入"); setLayout(bl1); setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);//關閉視窗,不結束程式 jp1.setLayout(fl1); jp2.setLayout(fl1); //控制元件屬性 //事件 jb1.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent evt) { String acc = "yudong"; String pass = "yudong"; String account = jtf1.getText(); char[] password = jpf1.getPassword(); String newPass = new String(password); if(count > 0) { if(account.equals(acc) && pass.equals(newPass)) { JOptionPane.showMessageDialog(null, "登入成功"); } else { count--; JOptionPane.showMessageDialog(null, "登入失敗!還剩"+count+"次機會登入!"); } // if(count == 0) {//可以關閉按鈕 // jb1.setEnabled(false); // } } else { JOptionPane.showMessageDialog(null, "拒絕登入!您超過3次登入失敗!"); } } }); //佈局 jp1.add(jl1); jp1.add(jtf1); jp2.add(jl2); jp2.add(jpf1); add(jp1); add(jp2); add(jb1); pack(); setLocation(720, 260); setVisible(true); } }
3、ThreeQuestion.java
package exceptioneight;
import java.awt.FlowLayout;
import static java.awt.FlowLayout.CENTER;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JPasswordField;
import javax.swing.JTextField;
/**程式設計三:
* 編寫成人標準身高和體重互查的程式。
* 身高和體生在兩個不同的文字框中輸入,要求輸入一個。
* 輸入身高則輸出體重,輸入體重則輸出身高。
* 用一個按鈕啟動互查。互查的公式為: 體重=身高-100。
*/
public class ThreeQuestion extends JFrame{
private JLabel jl1 = new JLabel("身高:");
private JLabel jl2 = new JLabel("體重:");
private JTextField jtf1 = new JTextField(16);
private JTextField jtf2 = new JTextField(16);
private JButton jb1 = new JButton("開始轉換");
private JPanel jp1 = new JPanel();
private JPanel jp2 = new JPanel();
private JPanel jp3 = new JPanel();
private FlowLayout fl1 = new FlowLayout(CENTER);
private BoxLayout bl1 = new BoxLayout(this.getContentPane(), BoxLayout.Y_AXIS);
public ThreeQuestion() {
super();
setLayout(bl1);
setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);//關閉視窗,不結束程式
jp1.setLayout(fl1);
jp2.setLayout(fl1);
jp3.setLayout(fl1);
//控制元件屬性
//事件
jb1.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
String height = jtf1.getText();
String weight = jtf2.getText();
if(!height.equals("")) {
int h = Integer.parseInt(height);
jtf2.setText(String.valueOf((h - 100)));
} else {
int w = Integer.parseInt(weight);
jtf1.setText(String.valueOf((w + 100)));
}
}
});
//佈局
jp1.add(jl1);
jp1.add(jtf1);
jp2.add(jl2);
jp2.add(jtf2);
jp3.add(jb1);
add(jp1);
add(jp2);
add(jp3);
pack();
setLocation(720, 260);
setVisible(true);
}
}
4、NewFourQuestion.java
package exceptioneight;
import java.awt.Color;
import java.awt.FlowLayout;
import static java.awt.FlowLayout.CENTER;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.logging.Level;
import java.util.logging.Logger;
//import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue;
import javax.swing.BoxLayout;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JSlider;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
/**程式設計四:
* 建立三個JSlider滾動條和一個JLabel標籤物件,
* 滾動條用來調整紅、綠、藍三色的比例,每個滾動條加標題邊界、設定刻度(自定)和標註。
* 當拖動滑塊修改三色比例時,變化標籤的背景色。
*/
public class NewFourQuestion extends JFrame{
JLabel jl0 = new JLabel(" ");
JLabel jl1 = new JLabel("紅:");
JLabel jl2 = new JLabel("綠:");
JLabel jl3 = new JLabel("藍:");
JSlider js1 = new JSlider(0, 255);//設定最小值和最大值
JSlider js2 = new JSlider(0, 255);
JSlider js3 = new JSlider(0, 255);
JPanel jp0 = new JPanel();
JPanel jp1 = new JPanel();
JPanel jp2 = new JPanel();
JPanel jp3 = new JPanel();
FlowLayout fl = new FlowLayout(CENTER);
public NewFourQuestion() {
super("RGB");
setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);//關閉視窗,不結束程式
BoxLayout box = new BoxLayout(this.getContentPane(), BoxLayout.Y_AXIS);
setLayout(box);//容器佈局為:方框垂直佈局
//屬性:
jp0.setLayout(fl);//面板佈局
jp1.setLayout(fl);
jp2.setLayout(fl);
jp3.setLayout(fl);
js1.setMajorTickSpacing(50);//設定滾動條
js1.setMinorTickSpacing(10);
js1.setPaintTicks(true);
js1.setPaintLabels(true);
js2.setMajorTickSpacing(50);
js2.setMinorTickSpacing(20);
js2.setPaintTicks(true);
js2.setPaintLabels(true);
js3.setMajorTickSpacing(50);
js3.setMinorTickSpacing(30);
js3.setPaintTicks(true);
js3.setPaintLabels(true);
jl0.setOpaque(true);//不透明
jl0.setBackground(new Color(150, 150, 150));
js1.addChangeListener(new ChangeListener() {
public void stateChanged(ChangeEvent e) {
int r = js1.getValue();
int g = js2.getValue();
int b = js3.getValue();
jl0.setBackground(new Color(r, g, b));
}
});
js2.addChangeListener(new ChangeListener() {
public void stateChanged(ChangeEvent e) {
int r = js1.getValue();
int g = js2.getValue();
int b = js3.getValue();
jl0.setBackground(new Color(r, g, b));
}
});
js3.addChangeListener(new ChangeListener() {
public void stateChanged(ChangeEvent e) {
int r = js1.getValue();
int g = js2.getValue();
int b = js3.getValue();
jl0.setBackground(new Color(r, g, b));
}
});
//佈局
jp0.add(jl0);
jp1.add(jl1);
jp1.add(js1);
jp2.add(jl2);
jp2.add(js2);
jp3.add(jl3);
jp3.add(js3);
add(jp0);
add(jp1);
add(jp2);
add(jp3);
pack();
setLocation(720, 260);
setVisible(true);
}
}
5、NewFiveQuestion.java
package exceptioneight;
import java.awt.Color;
import java.awt.FlowLayout;
import static java.awt.FlowLayout.CENTER;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.BoxLayout;
import javax.swing.ButtonGroup;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JRadioButton;
import javax.swing.JTextField;
/**程式設計五:
*建立一個文字框、三個單選按鈕、一個標籤和一個按鈕,
* 文字框用來輸入自然數N,根據選擇單選按鈕的不同,
* 分別計算:1+2+…N或1*2*…N或1+1/2+1/3+…1/N,
* 計算結果在標籤中顯示。
*/
public class NewFiveQuestion extends JFrame {
private JTextField jTextField1 = new JTextField(16);
private JLabel jLabel1 = new JLabel("請輸入自然數N:");
private JLabel jLabel2 = new JLabel("計算結果為: ");
private JPanel jpane0 = new JPanel();
private JPanel jpane1 = new JPanel();
private JPanel jpane2 = new JPanel();
private JPanel jpane3 = new JPanel();
private ButtonGroup buttonGroup = new ButtonGroup();//單選按鈕組
private JRadioButton jRadioButton1 = new JRadioButton("1+2+…N");
private JRadioButton jRadioButton2 = new JRadioButton("1*2*…N");
private JRadioButton jRadioButton3 = new JRadioButton("1+1/2+1/3+…1/N");
private FlowLayout fl = new FlowLayout(CENTER);
private BoxLayout box = new BoxLayout(this.getContentPane(), BoxLayout.Y_AXIS);
private String nStr;
private int nInt;
public NewFiveQuestion() {
super();
setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);//關閉視窗,不結束程式
setLayout(box);//容器佈局為:方框垂直佈局
//屬性
jpane1.setLayout(fl);
jpane2.setLayout(fl);
jpane3.setLayout(fl);
buttonGroup.add(jRadioButton1);
buttonGroup.add(jRadioButton2);
buttonGroup.add(jRadioButton3);
//事件
jRadioButton1.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent evt) {
nStr = jTextField1.getText();
if(!nStr.equals("") ) {
nInt = Integer.parseInt(nStr);
} else {
nInt = -1;
}
jLabel2.setText("計算結果為:" + String.valueOf(One(nInt)));
}
});
jRadioButton2.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
nStr = jTextField1.getText();
if(!nStr.equals("") ) {
nInt = Integer.parseInt(nStr);
} else {
nInt = -1;
}
jLabel2.setText("計算結果為:" + String.valueOf(Two(nInt)));
}
});
jRadioButton3.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
nStr = jTextField1.getText();
if(!nStr.equals("") ) {
nInt = Integer.parseInt(nStr);
} else {
nInt = -1;
}
jLabel2.setText("計算結果為:" + String.valueOf(Three(nInt)));
}
});
//佈局
jpane0.add(jLabel1);
jpane1.add(jTextField1);
jpane2.add(jRadioButton1);
jpane2.add(jRadioButton2);
jpane2.add(jRadioButton3);
jpane3.add(jLabel2);
add(jpane0);
add(jpane1);
add(jpane2);
add(jpane3);
pack();
setLocation(720, 260);
setVisible(true);
}
/**
* 1+2+…N
*/
public int One(int n) {
if(n < 1) return 0;
int sum = 0;
for(int i = 1; i <= n; i++){
sum += i;
}
return sum;
}
/**
* 1*2*…N
*/
public int Two(int n) {
if(n < 1) return 0;
int sum = 1;
for(int i = 1; i <= n; i++){
sum *= i;
}
return sum;
}
/**
* 1+1/2+1/3+…1/N
*/
public double Three(int n) {
if(n < 1) return 0;
double sum = 0;
for(int i = 1; i <= n; i++){
sum += 1.0/i;
}
return sum;
}
}
6、ExceptionEight.java
package exceptioneight;
import java.awt.FlowLayout;
import static java.awt.FlowLayout.CENTER;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextArea;
/**
*實驗八 主程式
*/
public class ExceptionEight extends JFrame{
private JTextArea textArea = new JTextArea(13, 50);//指定初始文字和寬度
private JButton jButton1 = new JButton("程式設計一");
private JButton jButton2 = new JButton("程式設計二");
private JButton jButton3 = new JButton("程式設計三");
private JButton jButton4 = new JButton("程式設計四");
private JButton jButton5 = new JButton("程式設計五");
private JPanel jPanel1 =new JPanel();
private JPanel jPanel2 =new JPanel();
private FlowLayout fl = new FlowLayout(CENTER);
private BoxLayout box = new BoxLayout(this.getContentPane(), BoxLayout.Y_AXIS);
public ExceptionEight() {
super();
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//關閉視窗,就結束程式
setLayout(box);//容器佈局為:方框垂直佈局
//控制元件屬性
jPanel1.setLayout(fl);
jPanel2.setLayout(fl);
textArea.setEditable(false);//文字框不可編輯
textArea.setLineWrap(true);//自動換行
textArea.setText(" 實驗八\n (1)程式設計:建立有一個文字框和三個按鈕的小程式。當按下每個按鈕時,使不同的文字顯示在文字框中。\n" +
" (2)程式設計:建立一使用者登入介面,接受使用者輸入的帳號和密碼,給三次輸入機會。\n" +
" (3)程式設計:編寫成人標準身高和體重互查的程式。身高和體生在兩個不同的文字框中輸入,要求輸入一個。輸入身高則輸出體重,輸入體重則輸出身高。用一個按鈕啟動互查。互查的公式為: 體重=身高-100。\n" +
" (4)程式設計:建立三個JSlider滾動條和一個JLabel標籤物件,滾動條用來調整紅、綠、藍三色的比例,每個滾動條加標題邊界、設定刻度(自定)和標註。當拖動滑塊修改三色比例時,變化標籤的背景色。\n" +
" (5)程式設計:建立一個文字框、三個單選按鈕、一個標籤和一個按鈕,文字框用來輸入自然數N,根據選擇單選按鈕的不同,分別計算:1+2+…N或1*2*…N或1+1/2+1/3+…1/N,計算結果在標籤中顯示。");
//事件
jButton1.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
/**程式設計一:
* 建立有一個文字框和三個按鈕的小程式。
* 當按下每個按鈕時,使不同的文字顯示在文字框中。
*/
new OneQuestion();
}
});
jButton2.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
/**程式設計二:
* 建立一使用者登入介面,接受使用者輸入的帳號和密碼,給三次輸入機會。
*/
new TwoQuestion();
}
});
jButton3.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
/**程式設計三:
* 編寫成人標準身高和體重互查的程式。
* 身高和體生在兩個不同的文字框中輸入,要求輸入一個。
* 輸入身高則輸出體重,輸入體重則輸出身高。
* 用一個按鈕啟動互查。互查的公式為: 體重=身高-100。
*/
new ThreeQuestion();
}
});
jButton4.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
/**程式設計四
* 建立三個JSlider滾動條和一個JLabel標籤物件,
* 滾動條用來調整紅、綠、藍三色的比例,每個滾動條加標題邊界、設定刻度(自定)和標註。
* 當拖動滑塊修改三色比例時,變化標籤的背景色。
*/
new NewFourQuestion();
}
});
jButton5.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
/**程式設計五
* 建立一個文字框、三個單選按鈕、一個標籤和一個按鈕,
* 文字框用來輸入自然數N,根據選擇單選按鈕的不同,
* 分別計算:1+2+…N或1*2*…N或1+1/2+1/3+…1/N,
* 計算結果在標籤中顯示。
*/
new NewFiveQuestion();
}
});
//佈局
jPanel1.add(textArea);
jPanel2.add(jButton1);
jPanel2.add(jButton2);
jPanel2.add(jButton3);
jPanel2.add(jButton4);
jPanel2.add(jButton5);
add(jPanel1);
add(jPanel2);
pack();
setLocation(420, 220);
setVisible(true);
}
public static void main(String[] args) {
new ExceptionEight();
}
}
三、執行結果
送你一份Java基礎課程PPT,老師講的超好,網盤連結:https://pan.baidu.com/s/1FnWr404NxwyzqBPAog74Ng
(若連結失效可發郵件到[email protected])