共两大题 窗体实现(略去测试类即 实例化自定义窗体)

小结:

1. JRadioButton 单选按钮
  ButtonGroup 按钮集合(加入单选按钮)
  清空选项需让ButtonGroup调用clearSelection()函数
  bg.clearSelection();

2. JCheckBox 多选
  清空选项需实例调用 jcb1.setSelected(false);

3. JComboBox 下拉列表
 利用additem(str)增加选项

4. 实现树切换后的画布切换
 JTabbedPane(选项卡) 清空所有组建removeAll();再增加组建

1、完成如下登陆界面, 其中用户名为abc。密码为1234,登陆成功登陆后弹出消息框,“欢迎您,abc 登陆”;如果密码输入错误,弹出对话框,显示“用户名和密码错误”,并清空输入的信息。

Login窗体类

package login;

import javax.swing.JFrame;

import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener; import javax.swing.*; public class Login extends JFrame implements ActionListener{
private static String USERNAME="abc";
private static String PASSWORD="1234"; JButton jb1,jb2;
JTextField text1,text2;
JDialog jd;
Login() {
setTitle("the login window");
JLabel label1=new JLabel("username ");
JLabel label2=new JLabel("password ");
text1=new JTextField(10);
text2=new JTextField(10);
jb1=new JButton("confirm");
jb2=new JButton("cancel");
jb1.addActionListener(this); setLayout(new GridLayout(3,1));
JPanel jp1=new JPanel();
JPanel jp2=new JPanel();
JPanel jp3=new JPanel();
jp1.add(label1);
jp1.add(text1);
jp2.add(label2);
jp2.add(text2);
jp3.add(jb1);
jp3.add(jb2);
add(jp1);
add(jp2);
add(jp3);
setBounds(100,100,300,150);
setVisible(true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
@Override
public void actionPerformed(ActionEvent e) {
if(e.getSource()==jb1);
if(text1.getText().equals(USERNAME)&&text2.getText().equals(PASSWORD)) {
JOptionPane.showMessageDialog(this, "输入正确");
new Info();
setVisible(false);
}
else{
JOptionPane.showMessageDialog(this, "用户名和密码错误");
text1.setText(null);
text2.setText(null);
}
}
}

结果

2、接第一题,如果登录成功,显示下面的界面:

(1)输入username,sex,department,hobby,telephoneNo, resume,点击“confirm”按钮,左边的信息显示在右边的区域,如下图所示:

(2)点击“Cancel”,弹出对话框请用户确认,如果用户选择“确定”,就清空左边和右边的信息。

(3)点击“Save”,在控制台显示:你的学号+你的姓名+“信息已保存”。

(4) 菜单“File”下显示 “New” 和 “Open”,指定“New”的快捷方式是Ctrl+N,点击“New”,将下面各输入部分清空(Sex项与Department项置为默认);点击“Open”,在控制台显示:你的学号+你的姓名+“点击了Open菜单项”。

(5)菜单“Edit”下显示“Cut”和“Copy”,点击“Cut”,在控制台显示:你的学号+你的姓名+“点击了Cut菜单项”; 点击“Copy”,在控制台显示:你的学号+你的姓名+“点击了Copy菜单项”。

info消息窗体类(大窗体实现)

package login;

import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.FlowLayout;
import java.awt.GridBagLayout;
import java.awt.GridLayout;
import java.awt.Label;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.InputEvent;
import java.awt.event.KeyEvent; import javax.swing.*; public class Info extends JFrame{ Info(){
//一些基本组建
JLabel label1 = new JLabel("Please input your information",Label.LEFT);
JLabel label2 = new JLabel("username");
JLabel label3 = new JLabel("sex");
JLabel label4 = new JLabel("department");
JLabel label5 = new JLabel("hobby");
JLabel label6 = new JLabel("telephoneNo");
JLabel label7 = new JLabel("resume");
JLabel label8 = new JLabel("your information");
JTextField text1=new JTextField(20);
JTextField text2=new JTextField(20);
JTextArea text3=new JTextArea(20,20);
JTextArea text4=new JTextArea(100,100); JPanel jp1=new JPanel();
JPanel jp2=new JPanel();
JPanel jp3=new JPanel();
JPanel jp4=new JPanel();
JPanel jp5=new JPanel();
JPanel jp6=new JPanel();
JPanel jp7=new JPanel(); JPanel left=new JPanel();
JPanel right=new JPanel(); JButton jb1=new JButton("Confirm");
JButton jb2=new JButton("Cancel");
JButton jb3=new JButton("Save"); //department下拉列表
JComboBox<String> box=new JComboBox<>();
box.addItem("Computer");
box.addItem("Math");
box.addItem("Energy");
box.addItem("Law"); //sex单选
JRadioButton sex1= new JRadioButton("male");
JRadioButton sex2= new JRadioButton("female");
ButtonGroup bg=new ButtonGroup();
bg.add(sex1);
bg.add(sex2); //hobby多选
JCheckBox jcb1=new JCheckBox("music");
JCheckBox jcb2=new JCheckBox("reading");
JCheckBox jcb3=new JCheckBox("cooking"); //设置菜单
JMenuBar menubar=new JMenuBar();
JMenu menu1=new JMenu("File");
JMenu menu2=new JMenu("Edit");
JMenuItem item1=new JMenuItem("New");
JMenuItem item2=new JMenuItem("Open");
JMenuItem item3=new JMenuItem("Cut");
JMenuItem item4=new JMenuItem("Copy");
item1.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_N,InputEvent.CTRL_MASK));
menu1.add(item1);
menu1.addSeparator();
menu1.add(item2);
menu2.add(item3);
menu2.addSeparator();
menu2.add(item4);
menubar.add(menu1);
menubar.add(menu2);
setJMenuBar(menubar);
item1.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) { text1.setText(null);
text2.setText(null);
text3.setText(null);
text4.setText(null);
//想重置JRadioButton必让ButtonGroup调用clearSelection()函数
bg.clearSelection();
jcb1.setSelected(false);
jcb2.setSelected(false);
jcb3.setSelected(false);
}
});
item2.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
System.out.println("20171335+cf+“点击了Open菜单项”");
}
});
item3.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
System.out.println("20171335+cf+“点击了Cut菜单项”");
}
});
item4.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
System.out.println("20171335+cf+“点击了Copy菜单项”");
}
}); //设置左半组件
jp1.add(sex1);
jp1.add(sex2);
jp2.add(jcb1);
jp2.add(jcb2);
jp2.add(jcb3); Box basebox,box1,box2;
box1=Box.createVerticalBox();
box2=Box.createVerticalBox();
basebox=Box.createHorizontalBox(); box1.add(label2);
box1.add(Box.createVerticalStrut(22));
box1.add(label3);
box1.add(Box.createVerticalStrut(22));
box1.add(label4);
box1.add(Box.createVerticalStrut(22));
box1.add(label5);
box1.add(Box.createVerticalStrut(22));
box1.add(label6);
box1.add(Box.createVerticalStrut(180));
box1.add(label7); box2.add(text1);
box2.add(Box.createVerticalStrut(10));
box2.add(jp1);
box2.add(Box.createVerticalStrut(10));
box2.add(box);
box2.add(Box.createVerticalStrut(10));
box2.add(jp2);
box2.add(Box.createVerticalStrut(10));
box2.add(text2);
box2.add(Box.createVerticalStrut(10));
box2.add(new JScrollPane(text3)); basebox.add(box1);
basebox.add(Box.createHorizontalStrut(20));
basebox.add(box2); jp3.add(jb1);
jp3.add(jb2);
jp5.add(jb1);
jp5.add(jb2); left.setLayout(new BoxLayout(left, BoxLayout.Y_AXIS));
left.add(label1);
left.add(basebox);
left.add(jp5); //设置右半组件
jp6.add(jb3); right.setLayout(new BoxLayout(right, BoxLayout.Y_AXIS));
right.add(label8);
right.add(text4);
right.add(jp6); //设置confirm键
jb1.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
String username = text1.getText();
String sex ="";
if(sex1.isSelected())
sex=sex1.getText();
else
sex=sex2.getText();
String department = box.getSelectedItem().toString();
String hobby="";
for(Component c:jp2.getComponents()) {
if(c instanceof JCheckBox) {
if(((JCheckBox)c).isSelected()) {
hobby+=((JCheckBox)c).getText();
hobby+=",";
}
}
}
String telephonNo=text2.getText();
String resume=text3.getText();
String result="my name: "+username+"\nsex: "+sex+"\ndepartment: "
+department+"\nhobby: "+hobby+"\ntelephonNo: "+telephonNo+"\nresume: "+resume;
text4.setText(result);
}
}); //设置Cancel键
jb2.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
int clean = JOptionPane.showConfirmDialog(null, "Do you confirm to delete it?","Warning",JOptionPane.OK_CANCEL_OPTION,JOptionPane.QUESTION_MESSAGE);
if(clean==JOptionPane.YES_OPTION) {
text1.setText(null);
text2.setText(null);
text3.setText(null);
text4.setText(null);
//想重置JRadioButton必让ButtonGroup调用clearSelection()函数
bg.clearSelection();
jcb1.setSelected(false);
jcb2.setSelected(false);
jcb3.setSelected(false);
}
}
});
//设置Save键
jb3.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
Saveinfo.save(text4.getText());
System.out.println("保存成功");
}
}); //整体画布
JSplitPane all=new JSplitPane(JSplitPane.HORIZONTAL_SPLIT,left,right);
add(all,BorderLayout.CENTER); //设置整体
setTitle("info");
setBounds(100,100,800,500);
setVisible(true);
validate();
setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
}
}

储存信息类(Save键用)

package login;

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.nio.file.Path; public class Saveinfo {
public static void save(String str){
File directory = new File(".");
String path = null;
try {
path = directory.getCanonicalPath();//获取当前路径
path +="\\info.txt";
System.out.println(path);
BufferedWriter b=new BufferedWriter(new OutputStreamWriter(new FileOutputStream(path)));
b.write(str);
b.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}

结果

3、参照如下界面,利用JTree, JSplitPane, JTable, JTabbedPane完成。

(1) 选中“沪宁高速A段维修工程”,三个页面如下:

(2) 选中“沪宁高速B段维修工程”,出现相应的页面,仅以“专家设置”举例如下:

(3) 选中任意一个表格,选中一行,在控制台输出选中行的内容,如下图选中了“沪宁高速A段维修工程”中“竞标单位设置”中的一行:

在控制台输出了相应内容:

窗体类

package 工程项目招标设置;

import java.awt.BorderLayout;

import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JSplitPane;
import javax.swing.JTabbedPane;
import javax.swing.JTable;
import javax.swing.JTree;
import javax.swing.event.TreeSelectionEvent;
import javax.swing.event.TreeSelectionListener;
import javax.swing.tree.DefaultMutableTreeNode; public class Project extends JFrame { Project(){ //A“指标设置”表格
JPanel jp1=new JPanel();
jp1.setLayout(new BorderLayout());
Object[] Names1 = {"指标编号", "指标名称", "是否入选", "指标分值"};
Object[][] a= {
{10,"施工性质","入选",20},
{11,"以往施工项目","入选",20},
{12,"注册资金","入选",30},
{13,"企业总资产","不选",20},
{14,"公司管理水平","不选",10},
};
JTable tabel1=new JTable(a,Names1);
tabel1.setShowGrid(true);
tabel1.addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent e){
for (int i = 0; i < tabel1.getColumnCount(); i++)
System.out.print(tabel1.getModel().getValueAt(tabel1.getSelectedRow(), i)+" ");
System.out.println();
}});
jp1.add(new JScrollPane(tabel1),BorderLayout.NORTH); //A"竞标单位设置"表格
JPanel jp2=new JPanel();
jp2.setLayout(new BorderLayout());
Object[] Names2 = {"公司编号", "公司名称", "法人代表", "成立时间","地址"};
Object[][] b= {
{001,"华西沪东建筑公司","张三","2000-2-1","上海市浦东新区"},
{002,"瑞丰建筑公司","李四","1998-3-1","上海市浦东新区"}
};
JTable tabel2=new JTable(b,Names2);
tabel2.setShowGrid(true);
jp2.add(new JScrollPane(tabel2),BorderLayout.NORTH);
tabel2.addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent e){
for (int i = 0; i < tabel2.getColumnCount(); i++)
System.out.print(tabel2.getModel().getValueAt(tabel2.getSelectedRow(), i)+" ");
System.out.println();
}}); //A“专家设置”表格
JPanel jp3=new JPanel();
jp3.setLayout(new BorderLayout());
Object[] Names3 = {"专家编号", "专家名称", "性别", "学历","单位"};
Object[][] c= {
{001,"张小三","男","博士","上海建筑研究所"},
{002,"刘芳芳","女","博士","北京建筑研究所"}
};
JTable tabel3=new JTable(c,Names3);
tabel3.setShowGrid(true);
jp3.add(new JScrollPane(tabel3),BorderLayout.NORTH);
tabel3.addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent e){
for (int i = 0; i < tabel3.getColumnCount(); i++)
System.out.print(tabel3.getModel().getValueAt(tabel3.getSelectedRow(), i)+" ");
System.out.println();
}}); //B“指标设置”表格
JPanel jp4=new JPanel();
jp4.setLayout(new BorderLayout());
Object[] Names4 = {"指标编号", "指标名称", "是否入选", "指标分值"};
Object[][] d= {
{1,"施工性质","不选",30},
{2,"以往施工项目","入选",40},
{3,"注册资金","入选",60},
{4,"企业总资产","不选",10},
{5,"公司管理水平","不选",20},
};
JTable tabel4=new JTable(d,Names4);
tabel4.setShowGrid(true);
jp4.add(new JScrollPane(tabel4),BorderLayout.NORTH);
tabel4.addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent e){
for (int i = 0; i < tabel4.getColumnCount(); i++)
System.out.print(tabel4.getModel().getValueAt(tabel4.getSelectedRow(), i)+" ");
System.out.println();
}}); //B"竞标单位设置"表格
JPanel jp5=new JPanel();
jp5.setLayout(new BorderLayout());
Object[] Names5 = {"公司编号", "公司名称", "法人代表", "成立时间","地址"};
Object[][] e= {
{001,"华东建筑公司","张三","2001-2-1","上海市浦东新区"},
{002,"瑞丰建筑公司","李四","2000-3-1","上海市浦东新区"}
};
JTable tabel5=new JTable(e,Names5);
tabel5.setShowGrid(true);
jp5.add(new JScrollPane(tabel5),BorderLayout.NORTH);
tabel5.addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent e){
for (int i = 0; i < tabel5.getColumnCount(); i++)
System.out.print(tabel5.getModel().getValueAt(tabel5.getSelectedRow(), i)+" ");
System.out.println();
}}); //B“专家设置”表格
JPanel jp6=new JPanel();
jp6.setLayout(new BorderLayout());
Object[] Names6 = {"专家编号", "专家名称", "性别", "学历","单位"};
Object[][] f= {
{001,"任芳","男","硕士","华北建筑研究所"},
{002,"刘齐齐","女","博士","华东建筑研究所"}
};
JTable tabel6=new JTable(f,Names6);
tabel6.setShowGrid(true);
jp6.add(new JScrollPane(tabel6),BorderLayout.NORTH);
tabel6.addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent e){
for (int i = 0; i < tabel6.getColumnCount(); i++)
System.out.print(tabel6.getModel().getValueAt(tabel6.getSelectedRow(), i)+" ");
System.out.println();
}}); //选项卡-收录表格
JTabbedPane p=new JTabbedPane(JTabbedPane.NORTH); //“招标项目名”树
DefaultMutableTreeNode root = new DefaultMutableTreeNode("招标项目名");
DefaultMutableTreeNode node1 = new DefaultMutableTreeNode("沪宁高速A段维修工程");
DefaultMutableTreeNode node2 = new DefaultMutableTreeNode("沪宁高速B段维修工程");
root.add(node1);
root.add(node2);
JTree tree=new JTree(root);
tree.addTreeSelectionListener(new TreeSelectionListener() {
@Override
public void valueChanged(TreeSelectionEvent e) {
DefaultMutableTreeNode node=(DefaultMutableTreeNode)tree.getLastSelectedPathComponent();
if(node.equals(node1)) {
p.removeAll();
p.add("指标设置",jp1);
p.add("竞标单位设置",jp2);
p.add("专家设置",jp3);
}
if(node.equals(node2)) {
p.removeAll();
p.add("指标设置",jp4);
p.add("竞标单位设置",jp5);
p.add("专家设置",jp6);
}
}
}); setTitle("工程项目招标设置");
JSplitPane jsp=new JSplitPane(JSplitPane.HORIZONTAL_SPLIT,tree,p);
jsp.setDividerLocation(170);
add(jsp);
setBounds(100,100,700,400);
setVisible(true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}

结果

java 实验6 图形用户界面设计试验(2)的更多相关文章

  1. java 实验5 图形用户界面设计试验

    常用布局 1).流布局: FlowLayout 从左到右,自上而下方式在容器中排列,控件的大小不会随容器大小变化. 容器.setLayout(new FlowLayout(FlowLayout.LEF ...

  2. JAVA记事本的图形用户界面应用程序含过滤

    JAVA记事本的图形用户界面应用程序 过滤 题目简介: 整体分析: 实验代码: package note; import java.awt.EventQueue; import java.awt.ev ...

  3. JAVA记事本的图形用户界面应用程序含加密

    JAVA记事本的图形用户界面应用程序 加密 题目简介: 整体分析: 实验代码: import java.awt.EventQueue; import java.awt.event.ActionEven ...

  4. AWT是Java基础类 (JFC)的一部分,为Java程序提供图形用户界面(GUI)的标准API

    抽象窗口工具包 (Abstract Windowing Toolkit) (AWT)是Java的平台独立的窗口系统,图形和用户界面器件工具包. AWT是Java基础类 (JFC)的一部分,为Java程 ...

  5. JAVA记事本的图形用户界面应用程序

    JAVA记事本的图形用户界面应用程序 整体分析: 代码实现: import java.awt.EventQueue; import java.awt.event.ActionEvent; import ...

  6. 借助WindowBuilder插件轻松完成JAVA图形用户界面编辑

    如果以纯代码的形式进行JAVA的图形用户界面编辑,将是一件非常痛苦的事,博主在学习过程中发现了JAVA GUI编辑神器——WindowBuilder,提供可视化的编辑界面,控件的添加.排版只需使用鼠标 ...

  7. 黑马程序员——【Java基础】——GUI(图形用户界面)

    ---------- android培训.java培训.期待与您交流! ---------- 一.概述 1.GUI(GraphicalUser Interface):又称图形用户界面,是计算机用户与计 ...

  8. java第八节 GUI/图形用户界面

    /* *第8讲 GUI/图形用户界面 * AWT的基础知识 * GUI全称是Graphical User Interface,即图形用户界面 * JDK中提供了AWT和Swing两个包,用于GUI程序 ...

  9. 抽象窗口工具包AWT (Abstract Window Toolkit) 是 API为Java 程序提供的建立 图形用户界面

    抽象窗口工具包AWT (Abstract Window Toolkit) 是 API为Java 程序提供的建立 图形用户界面GUI (Graphics User Interface)工具集,AWT可用 ...

随机推荐

  1. 迷你MVVM框架 avalonjs 1.3.2发布

    时隔一个月,avalon的新版本终于出来了,本次更新带来强大的模块间通信机制,其他就往常一样FIX BUG. 在文本绑定里,IE会对流离于DOM树外的文本节点的data属性赋值报错,需要添加一层判定 ...

  2. GBDT,Adaboosting概念区分 GBDT与xgboost区别

    http://blog.csdn.net/w28971023/article/details/8240756 ============================================= ...

  3. Redis OBJECT命令

    [Redis OBJECT命令] 1.OBJECT subcommand [arguments [arguments]] OBJECT 命令允许从内部察看给定 key 的 Redis 对象. 它通常用 ...

  4. PLSQL Developer工具的使用

    1.运行 2.字体大小 导入csv文件. 任何工具都有失败的可能, 这个时候,也失败了. 当然还有另一种可能,文件被人为改过了,括号改过了,就即使使用下面的kettle工具也没用了.这时可以导出文件对 ...

  5. PolyCluster: Minimum Fragment Disagreement Clustering for Polyploid Phasing 多聚类:用于多倍体的最小碎片不一致聚类

    摘要 分型是计算生物学的一个新兴领域,在临床决策和生物医学科学中有着重要的应用. 虽然机器学习技术在许多生物医学应用中显示出巨大的潜力,但它们在分型中的用途尚未完全理解. 在本文中,我们研究了基于聚类 ...

  6. Chrome 扩展 Vue Devtools

    Vue.js devtools是基于google chrome浏览器的一款调试vue.js应用的开发者浏览器扩展,可以在浏览器开发者工具下调试代码. 1)首先在github下载devtools源码,地 ...

  7. DataStage 七、在DS中使用配置文件分配资源

    DataStage序列文章 DataStage 一.安装 DataStage 二.InfoSphere Information Server进程的启动和停止 DataStage 三.配置ODBC Da ...

  8. WEB开发常见错误-php无法操作数据库

    Ubuntu 安装phpmyadmin 和配置   ubuntu 安装 phpmyadmin  两种 : 1: apt-get 安装  然后使用 已有的虚拟主机目录建立软连接  sudo  apt-g ...

  9. C语言基础课First作业

    一.大学和高中最大的不同是没有人天天看着你,也不会担心上课的时候班主任在后门偷偷瞄着我们,通过阅读邹欣老师的博客后,心目中理想的师生关系就是Coach/Trainee(健身教练/健身学员)的关系,想到 ...

  10. Introduction to Razor Pages in ASP.NET Core

    https://docs.microsoft.com/en-us/aspnet/core/mvc/razor-pages/ 从ASP.NET Core 2.0.0版本之后,添加了新的特性Razor p ...