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

小结:

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. CSS文档流、块级元素、内联元素

    CSS文档流与块级元素(block).内联元素(inline),之前翻阅不少书籍,看过不少文章, 看到所多的是零碎的CSS布局基本知识,比较表面.看过O'Reilly的<CSS权威指南>, ...

  2. JSF + Primefaces: Problem with “rendered” components with ajax

    Cant seem to get rendered to work correctly with update attributes. Here is my codes <ui:define n ...

  3. sql中纵表变横表

    纵表格式如图所示: 查询sql语句如下: ),content)content,Date from SummerChina ' 变成横表如图所示: 纵表变横表sql语句如下: select Time, ...

  4. LPCTSTR和LPTSTR和char *究竟有什么区别

    LPSTR = char* LPCSTR = const char* LPTSTR: 如果定义了UNICODE宏,那么LPTSTR = wchar_t*否则LPTSTR = char* LPCTSTR ...

  5. idea 插件

    https://plugins.jetbrains.com/plugin/4509-statistic

  6. clr相关名词

    程序集:一个或多个类型定义文件和资源文件的集合 Native Code(本机代码): 已被编译为特定于处理器的机器码的代码. 本地代码(native code)是计算机编程(代码),编译用来运行一个特 ...

  7. 721. Accounts Merge合并电子邮件账户

    [抄题]: Given a list accounts, each element accounts[i] is a list of strings, where the first element  ...

  8. 11. Container With Most Water 装水最多的容器

    [抄题]: Given n non-negative integers a1, a2, ..., an, where each represents a point at coordinate (i, ...

  9. 解题报告 - 577. Employee Bonus

    Select all employee's name and bonus whose bonus is < 1000. Table:Employee +-------+--------+---- ...

  10. apache重启

    1.进入apache下的bin目录 /usr/local/apache/bin 2.执行命令 ./apachectl graceful