计算机小菜鸟 ~ 2022-05-16 21:25 采纳率: 58.8%
浏览 80
已结题

GUI界面请问问题在哪里,该怎么修改

照着书上写的代码,问题出在哪里呢?为什么运行不出来,该怎么修改呀?

package 第12章示例;
import java. util. * ;

import 第938.Employee38;
/* *
*类EmployeeCatalog维护员工信息目录
*获得包含类{@link Employee}的对象集合
**@author author
*@version1.1.0
*@see Employee
*/public class EmployeeCatalog38 implements Iterable<Employee38>{
//创建一个 ArrayList 存放 Employee 对象    
private ArrayList<Employee38> employees;
/* *
构造一个空的 ArrayList
/public EmployeeCatalog()
{this. employees ==new ArrayList<Employee>();
}
/* *
*添加一个新的对象到employees中
**@param employee
* Employee 对象
*/public void addEmployee(Employee38 employee){
this. employees. add(employee);
}/* *
*返回employees 对象的游标类
* @return an@link Iterator} of{@link Employee}
*/public Iterator<Employee38> iterator(){return this. employees. iterator();}
/* *
*返回具有给定 id 号的员工信息
* @param id
*员工的编号 id
* @return employee
*  具有给定编号的雇员对象
*  如果给定的员工编号没有找到,则返回空
*/public Employee38 getEmployee(String id) {
 for(Employee employee : this. employees) {
if(employee. getId().equals(id)){
return employee;
}}
return null;}
/* *
*返回 ArrayList 中存放的 Employee 对象个数
*
* @return ArrayList 中存放的Employee 对象个数
*/
public int getNumberOfEmployees(){
return this. employees. size();
}
/* *
*返回一个包含该目录中所有员工的id号的数组
* @return arrayOfIds
*一个包含该目录中所有员工的id号的数组
*/
public String[] getIds(){
//构造String数组,存放所有员工的id号
String[] arrayOfIds = new String[getNumberOfEmployees()] ;
int i = 0;
for(Employee38 employee:this.employees){
arrayOfIds[(i++)] = employee. getId();
}
return arrayOfIds;
}}

package12章示例;
import java.io.* ; 
import java.awt. *;
import java. text. *;
import java.util. * ;
import javax. swing. *;
import javax. swing. event. * ;

import938.Employee38;
/**
* 类EmployeeManagerGUI 构建图形界面
* 使用图形界面的方式显示员工的基本信息
* @author author
* @version1.1.0
* @see Employee
* @see EmployeeCatalog
* @see EmployeeLoader
* @see FileEmployeeLoader,
* @see DataFormatException*
* @see DataField
*/
public class EmployeeManagerGUI38 extends JPanel {
/*标准错误输出流 */
     static private PrintWriter stdErr = new PrintWriter(System.err,true);
     /*窗口的宽度以像素为单位*/ 
     static private int WIDTH=400;
     /*窗口的高度以像素为单位*/
     static private int HEIGHT=240;
     /*列表单元的像素宽度 */
     static private int CELL_SIZE=60;
     /*列表中可见的行数 */
     static private int LIST_ROWS=6;
     /*状态文本区域的行数 */
     static private int STATUS_ROWS = 4;
     /*状态文本区域的列数 */
     static private int STATUS_COLS=40;
     /*显示员工列表 */
     private JList employeeList;
     /*显示员工id列表 */
     private JPanel employeeIdPanel;
     /*显示员工基本信息 */
     private JPanel employeePanel;
     /*显示状态信息 */
     private JTextArea statusTextArea;
     /*存放员工目录*/
     private EmployeeCatalog38 employeeCatalog;
/**
*启动图形界面显示主程序,设定图形窗口的基本信息
*
* @param args
*字符串参数,未用到    
* @throws IOException
*读入数据出现问题,抛出该异常
* @throws ParseException
*雇员生日数据格式转换出现问题,抛出该异常
*/
public static void main(String[] args)throws IOException,ParseException{    
//存放雇员基本信息文件的文件名 
    String filename="";
//从运行参数中获得存放雇员基本信息文件的文件名
if (args.length!=1){
     filename = "Employee. dat";
} else {
     filename= args[0];
}        
try {}
/**
//从文件名为filename的文件中读入员工信息
EmployeeCatalog employeeCatalog(new FileEmployeeLoader())    
. loadCatalog(filename);
//设定窗口的标题    
JFrame frame= new JFrame("公司雇员信息管理系统");
//设定图形窗口的显示内容
frame. setContentPane(new EmployeeManagerGUI(employeeCatalog));
//设定默认关闭操作
frame. setDefaultCloseOperation(JFrame. EXIT_ON_CLOSE);
//设定图形窗口的大小
frame. setSize(WIDTH,HEIGHT);
//得到图形窗口的大小
Dimension frameSize =frame getSize();
//得到屏幕的尺寸
Dimension screenSize =Toolkit. getDefaultToolkitO.getScreenSize);
int centerX = screenSize. width/2; 
int centerY = screenSize. height/2; 
int halfWidth = frameSize.width/2;
int halfHeight = frameSizeheight/2;
//将图形界面定位到屏幕中央
frame. setLocation(centerX-halfWidth,centerY-halfHeight);
//设定图形窗口的大小可变
frame. setResizable(true);
// 图形窗口可见
frame. setVisible(true);
}catch(FileNotFoundException fnfe){
stdErr.println("文件不存在"); 
System.exit(1);
}catch (DataFormatException dfe){
  stdErr.println("文件中包含错误格式信息:"+dfe.getMessage()); 
  System.exit(1);
}}
/* *
*实例化图形界面的部件和窗口.
* @param iCatalog
*a employee catalog.
*
*/
public EmployeeManagerGUI38(EmployeeCatalog38 iCatalog) {
employeeCatalog=iCatalog;
//新建JList存放员工目录
employeeList=newJList(employeeCatalog. getIds());
//设定JList的选择模式为单选
employeeList.setSelectionMode(ListSelectionModelSINGLE_SELECTION);
//设定JList的可见列表索引个数
employeeList.setVisibleRowCount(LIST_ROWS);
employeeList. setFixedCellWidth(CELLSIZE);
/×atusTextArea 显示提示信息
statusTextArea=new JTextArea(STATUS_ROWSSTATUS_COLS);
//设定statusTextArea 不可编辑
statusTextArea. setEditable(false);
//创建显示员工基本信息面板
employeePanel=newJPanelO;
//设定employeePanel的标题
employeePanel.setBorder(BorderFactory.createTitledBorder("员工基本信息"));
//employeeldPanel存放员工id列表
employeeIdPanel=new JPanel();
//设定employeeIdPanel的标题
employeeIdPanel.setBorder(BorderFactory.createTitledBorder("员工号"));
// 将存放员工 id 号的 JList 添加到 employeeIdPanel 中 
employeeldPanel.add(newJScrollPane(employeeList));
//设定布局管理器
setLayout(new BorderLayout());
// 将部件添加到窗口中
add(employeeIdPanel,BorderLayout. WEST);
add(employeePanel,BorderLayout.CENTER);    
add(statusTextArea, BorderLayout.SOUTH);
// 为JList 添加事件监听器
employeeList. addListSelectionListener(new EmployeeListListener());
}
/* *
*类EmployeeListListener
*监听JList 的选择并处理List选择事件
*/
class EmployeeListListener implements ListSelectionListener{
/* *    
*显示选择的员工的基本信息。         
*@param event
*事件对象.
*/
public void valueChanged(ListSelectionEvent event) {
//获得被选择员工的员工号
   String id=(String)employeeList. getSelectedValue();
   //获得被选择员工的基本信息
   Employee38 employee=employeeCatalog.getEmployee38(id);
   //清空员工基本信息面板
   employeePanel.removeAll();
   employeePanel.setVisible(false);
   //显示被选择员工的基本信息
   employeePanel.add(getDataFieldsPanel(employee.getDataFields())); 
   employeePanel.setVisible(true);
   //在状态区显示基本信息面板的当前状态
   statusTextArea. setText("Employee" + id
             +"'s information list as above.");
}
}
/* *
*获取包含员工基本信息的JPanel 对象
* @param dataFields
*包含员工基本信息的ArrayList
* @return employeeInfo
*
*包含员工基本信息的JPanel 对象
*/
private JPanel getDataFieldsPanel(ArrayList<DataField> dataFields) {
//创建一个 JPanel 对象存放员工基本信息 
    JPanel employeenfo=new JPanel();
    //设定JPanel的布局管理器
    employeeInfo. setLayout(new BorderLayout());
    //新建两个JPanel 对象,left显示信息类型,right显示员工信息
   JPanel left = new JPanel();
   JPanel right =new JPanel();
   //设定left 和 right的大小
   left. setPreferredSize(new Dimension(80,220));
   right. setPreferredSize(new Dimension(200,220)); 
   left.setLayout(new GridLayout(11,0)); right. setLayout(new GridLayout(11,0));
   //使用Iterator遍历dataFields取得员工信息
   for (DataField employee: dataFields){
      //JLabel显示信息类型
      JLabel eInfoName=new JLabel();
      //JTextField显示对应类型的信息
      JTextField eInfo=new JTextField(); 
      eInfo. setEditable(false);
      //设定JLabel和JTextField的内容
      eInfoName. setText(employee.getName() +":");
      eInfo. setText(employee. getValue());
      //将JLabel 和JTextField 添加到 JPanel容器中 
      left. add(eInfoName);
      right.add(eInfo);
      //将left和right添加到employeeInfo中
      employeeInfo. add(left,BorderLayout.WEST);
      employeeInfo. add(right,BorderLayout.EAST);
      //返回包含员工信息的 JPanel
      return employeeInfo;
   }
}

img

  • 写回答

5条回答 默认 最新

  • WaitIKnowYou 2022-05-16 21:54
    关注
    获得1.50元问题酬金

    这些地方代码注释块都错了哦 注意 /* */的位置

    img

    评论

报告相同问题?

问题事件

  • 系统已结题 5月24日
  • 创建了问题 5月16日

悬赏问题

  • ¥15 怎么把512还原为520格式
  • ¥15 MATLAB的动态模态分解出现错误,以CFX非定常模拟结果为快照
  • ¥15 求高通平台Softsim调试经验
  • ¥15 canal如何实现将mysql多张表(月表)采集入库到目标表中(一张表)?
  • ¥15 wpf ScrollViewer实现冻结左侧宽度w范围内的视图
  • ¥15 栅极驱动低侧烧毁MOSFET
  • ¥30 写segy数据时出错3
  • ¥100 linux下qt运行QCefView demo报错
  • ¥50 F1C100S下的红外解码IR_RX驱动问题
  • ¥20 基于matlab的航迹融合 航迹关联 航迹插补