package com.jdhr.view;import java.awt.BorderLayout;
import java.awt.Cursor;
import java.awt.Font;
import java.awt.GridLayout;
import java.awt.Image;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JSplitPane;
import javax.swing.JTable;
import javax.swing.SwingConstants;import com.jdhr.model.UserModel;public class MainWindows extends JFrame implements ActionListener,MouseListener
{
JMenu jm1, jm2, jm3, jm4, jm5, jm6, jm7, jm8;
JMenuItem jmi1, jmi2, jmi3;
JMenuBar jmb;
JPanel jp1, jp2, jp3,jp4;
JLabel jl1, jl2;
JScrollPane jsp1;
JSplitPane jsp;
JTable jt;
JButton jb1,jb2,jb3,jb4;
UserModel um;
Cursor cs;
Font font = new Font("微软雅黑", Font.PLAIN, 36);
Font font2 = new Font("微软雅黑", Font.PLAIN, 14);
int w = Toolkit.getDefaultToolkit().getScreenSize().width;
int h = Toolkit.getDefaultToolkit().getScreenSize().height;
int w1 = (int) (w * 0.08); public static void main(String[] args)
{
new MainWindows();
} // 菜单栏
public void MainMenu()
{
jm1 = new JMenu("国家机构");
jm1.setFont(font2);
jmi1 = new JMenuItem("新增(N)");
jmi1.setFont(font2);
jmi2 = new JMenuItem("合并(U)");
jmi2.setFont(font2);
jmi3 = new JMenuItem("撤销(R)");
jmi3.setFont(font2);
jm1.add(jmi1);
jm1.add(jmi2);
jm1.add(jmi3);
jm2 = new JMenu("人员管理");
jm2.setFont(font2);
jm3 = new JMenu("合同管理");
jm3.setFont(font2);
jm4 = new JMenu("人事异动");
jm4.setFont(font2);
jm5 = new JMenu("培训管理");
jm5.setFont(font2);
jm6 = new JMenu("绩效管理");
jm6.setFont(font2);
jm7 = new JMenu("考勤休假");
jm7.setFont(font2);
jm8 = new JMenu("薪酬管理");
jm8.setFont(font2); jmb = new JMenuBar(); jmb.add(jm1);
jmb.add(jm2);
jmb.add(jm3);
jmb.add(jm4);
jmb.add(jm5);
jmb.add(jm6);
jmb.add(jm7);
jmb.add(jm8);
this.setJMenuBar(jmb);
} // 主面板
public void MainPanel()
{
cs = new Cursor(Cursor.HAND_CURSOR); jp1 = new JPanel();
jp1.setLayout(new GridLayout(5, 1));
jl1 = new JLabel("国家管理",SwingConstants.CENTER);
jl1.setCursor(cs);
jl1.setEnabled(false);
jl1.addMouseListener(this); jl2 = new JLabel("人员管理",SwingConstants.CENTER);
jl2.setCursor(cs);
jl2.setEnabled(false);
jl2.addMouseListener(this); jp1.add(jl1);
jp1.add(jl2);
jt = new JTable();
jsp1 = new JScrollPane(jt);
jsp1.setSize(800, 600);
jp3 = new JPanel(new BorderLayout());
jp3.add(jsp1);
jsp = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, jp1, jp3);
jsp.setEnabled(false);
jsp.setDividerSize(5);
jsp.setDividerLocation(w1);
this.add(jsp);
jp4 = new JPanel();
jb1 = new JButton("添加");
jb1.addActionListener(this);
jb2 = new JButton("修改");
jb2.addActionListener(this);
jb3 = new JButton("删除");
jb3.addActionListener(this);
jp4.add(jb1);
jp4.add(jb2);
jp4.add(jb3);
this.add(jp4,"South");
} // 主方法
public MainWindows()
{
this.MainPanel();
this.MainMenu();
this.setTitle("灰太郎管理系统"); Image image = Toolkit.getDefaultToolkit().createImage("/image/htl.jpg");
this.setIconImage(image);
this.setSize(w , h - 28);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true);
} @Override
public void actionPerformed(ActionEvent e)
{ } @Override
public void mouseClicked(MouseEvent e)
{
if (e.getSource() == jl1)
{
String sql = "select * from nation";
String[] pars = {};
um = new UserModel();
um.queryNation(sql, pars);
jt.setModel(um);
}
else if (e.getSource() == jl2)
{
String sql = "select * from heros order by heroid";
String[] pars = {};
um = new UserModel();
um.queryHeros(sql, pars);
jt.setModel(um);
} } @Override
public void mouseEntered(MouseEvent e)
{
if (e.getSource() == jl1)
{
jl1.setEnabled(true);
jl1.setCursor(cs); }
else if (e.getSource() == jl2)
{
jl2.setEnabled(true);
jl2.setCursor(cs);
} } @Override
public void mouseExited(MouseEvent e)
{
if (e.getSource() == jl1)
{
jl1.setEnabled(false);
jl1.setCursor(cs);
}
else if (e.getSource() == jl2)
{
jl2.setEnabled(false);
jl2.setCursor(cs);
} } @Override
public void mousePressed(MouseEvent e)
{
// TODO Auto-generated method stub } @Override
public void mouseReleased(MouseEvent e)
{
// TODO Auto-generated method stub }}
问题:当光标移动到jl1和jl2上面时,并没有出现手的形状,这是怎么回事
该怎样处理
import java.awt.Cursor;
import java.awt.Font;
import java.awt.GridLayout;
import java.awt.Image;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JSplitPane;
import javax.swing.JTable;
import javax.swing.SwingConstants;import com.jdhr.model.UserModel;public class MainWindows extends JFrame implements ActionListener,MouseListener
{
JMenu jm1, jm2, jm3, jm4, jm5, jm6, jm7, jm8;
JMenuItem jmi1, jmi2, jmi3;
JMenuBar jmb;
JPanel jp1, jp2, jp3,jp4;
JLabel jl1, jl2;
JScrollPane jsp1;
JSplitPane jsp;
JTable jt;
JButton jb1,jb2,jb3,jb4;
UserModel um;
Cursor cs;
Font font = new Font("微软雅黑", Font.PLAIN, 36);
Font font2 = new Font("微软雅黑", Font.PLAIN, 14);
int w = Toolkit.getDefaultToolkit().getScreenSize().width;
int h = Toolkit.getDefaultToolkit().getScreenSize().height;
int w1 = (int) (w * 0.08); public static void main(String[] args)
{
new MainWindows();
} // 菜单栏
public void MainMenu()
{
jm1 = new JMenu("国家机构");
jm1.setFont(font2);
jmi1 = new JMenuItem("新增(N)");
jmi1.setFont(font2);
jmi2 = new JMenuItem("合并(U)");
jmi2.setFont(font2);
jmi3 = new JMenuItem("撤销(R)");
jmi3.setFont(font2);
jm1.add(jmi1);
jm1.add(jmi2);
jm1.add(jmi3);
jm2 = new JMenu("人员管理");
jm2.setFont(font2);
jm3 = new JMenu("合同管理");
jm3.setFont(font2);
jm4 = new JMenu("人事异动");
jm4.setFont(font2);
jm5 = new JMenu("培训管理");
jm5.setFont(font2);
jm6 = new JMenu("绩效管理");
jm6.setFont(font2);
jm7 = new JMenu("考勤休假");
jm7.setFont(font2);
jm8 = new JMenu("薪酬管理");
jm8.setFont(font2); jmb = new JMenuBar(); jmb.add(jm1);
jmb.add(jm2);
jmb.add(jm3);
jmb.add(jm4);
jmb.add(jm5);
jmb.add(jm6);
jmb.add(jm7);
jmb.add(jm8);
this.setJMenuBar(jmb);
} // 主面板
public void MainPanel()
{
cs = new Cursor(Cursor.HAND_CURSOR); jp1 = new JPanel();
jp1.setLayout(new GridLayout(5, 1));
jl1 = new JLabel("国家管理",SwingConstants.CENTER);
jl1.setCursor(cs);
jl1.setEnabled(false);
jl1.addMouseListener(this); jl2 = new JLabel("人员管理",SwingConstants.CENTER);
jl2.setCursor(cs);
jl2.setEnabled(false);
jl2.addMouseListener(this); jp1.add(jl1);
jp1.add(jl2);
jt = new JTable();
jsp1 = new JScrollPane(jt);
jsp1.setSize(800, 600);
jp3 = new JPanel(new BorderLayout());
jp3.add(jsp1);
jsp = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, jp1, jp3);
jsp.setEnabled(false);
jsp.setDividerSize(5);
jsp.setDividerLocation(w1);
this.add(jsp);
jp4 = new JPanel();
jb1 = new JButton("添加");
jb1.addActionListener(this);
jb2 = new JButton("修改");
jb2.addActionListener(this);
jb3 = new JButton("删除");
jb3.addActionListener(this);
jp4.add(jb1);
jp4.add(jb2);
jp4.add(jb3);
this.add(jp4,"South");
} // 主方法
public MainWindows()
{
this.MainPanel();
this.MainMenu();
this.setTitle("灰太郎管理系统"); Image image = Toolkit.getDefaultToolkit().createImage("/image/htl.jpg");
this.setIconImage(image);
this.setSize(w , h - 28);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true);
} @Override
public void actionPerformed(ActionEvent e)
{ } @Override
public void mouseClicked(MouseEvent e)
{
if (e.getSource() == jl1)
{
String sql = "select * from nation";
String[] pars = {};
um = new UserModel();
um.queryNation(sql, pars);
jt.setModel(um);
}
else if (e.getSource() == jl2)
{
String sql = "select * from heros order by heroid";
String[] pars = {};
um = new UserModel();
um.queryHeros(sql, pars);
jt.setModel(um);
} } @Override
public void mouseEntered(MouseEvent e)
{
if (e.getSource() == jl1)
{
jl1.setEnabled(true);
jl1.setCursor(cs); }
else if (e.getSource() == jl2)
{
jl2.setEnabled(true);
jl2.setCursor(cs);
} } @Override
public void mouseExited(MouseEvent e)
{
if (e.getSource() == jl1)
{
jl1.setEnabled(false);
jl1.setCursor(cs);
}
else if (e.getSource() == jl2)
{
jl2.setEnabled(false);
jl2.setCursor(cs);
} } @Override
public void mousePressed(MouseEvent e)
{
// TODO Auto-generated method stub } @Override
public void mouseReleased(MouseEvent e)
{
// TODO Auto-generated method stub }}
问题:当光标移动到jl1和jl2上面时,并没有出现手的形状,这是怎么回事
该怎样处理
原因就是jl1 jl2都被加入到jp1当中,而jp1又被加入到jsp这样一个分割面板当中,而你把jsp.setEnabled(false),导致jl1 jl2的光标效果不起作用。另外,建议你把鼠标侦听里面的设置光标的代码去掉,完全冗余,就在最开始jl1 jl2设置一次 jl1.setCursor(cs); jl2.setCursor(cs);就能解决问题
{
if (e.getSource() == jl1)
{
jl1.setEnabled(true);
jl1.setCursor(cs); }
public void mouseExited(MouseEvent e)
{
if (e.getSource() == jl1)
{
jl1.setEnabled(false);
jl1.setCursor(cs);
}
纯属多次一举。你鼠标不进入这个控件的范围,你再怎么设置也看不到。
直接在构造函数或者其他初始化方法中设置,就可以了
import java.awt.BorderLayout;
import java.awt.Cursor;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.GridLayout;
import java.awt.Image;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JSplitPane;
import javax.swing.JTable;
import javax.swing.SwingConstants;import com.jdhr.model.UserModel;
public class MainWindows extends JFrame implements ActionListener,MouseListener
{
JMenu jm1, jm2, jm3, jm4, jm5, jm6, jm7, jm8;
JMenuItem jmi1, jmi2, jmi3;
JMenuBar jmb;
JPanel jp1, jp2, jp3,jp4;
JLabel jl1, jl2;
JScrollPane jsp1;
JSplitPane jsp;
JTable jt;
JButton jb1,jb2,jb3,jb4;
UserModel um;
Cursor cs;
Font font = new Font("微软雅黑", Font.PLAIN, 36);
Font font2 = new Font("微软雅黑", Font.PLAIN, 14);
int w = Toolkit.getDefaultToolkit().getScreenSize().width;
int h = Toolkit.getDefaultToolkit().getScreenSize().height;
int w1 = (int) (w * 0.08);
float weight=0.2f;//ioe_gaoyong添加
public static void main(String[] args)
{
new MainWindows();
} // 菜单栏
public void MainMenu()
{
jm1 = new JMenu("国家机构");
jm1.setFont(font2);
jmi1 = new JMenuItem("新增(N)");
jmi1.setFont(font2);
jmi2 = new JMenuItem("合并(U)");
jmi2.setFont(font2);
jmi3 = new JMenuItem("撤销(R)");
jmi3.setFont(font2);
jm1.add(jmi1);
jm1.add(jmi2);
jm1.add(jmi3);
jm2 = new JMenu("人员管理");
jm2.setFont(font2);
jm3 = new JMenu("合同管理");
jm3.setFont(font2);
jm4 = new JMenu("人事异动");
jm4.setFont(font2);
jm5 = new JMenu("培训管理");
jm5.setFont(font2);
jm6 = new JMenu("绩效管理");
jm6.setFont(font2);
jm7 = new JMenu("考勤休假");
jm7.setFont(font2);
jm8 = new JMenu("薪酬管理");
jm8.setFont(font2); jmb = new JMenuBar(); jmb.add(jm1);
jmb.add(jm2);
jmb.add(jm3);
jmb.add(jm4);
jmb.add(jm5);
jmb.add(jm6);
jmb.add(jm7);
jmb.add(jm8);
this.setJMenuBar(jmb);
} // 主面板
public void MainPanel()
{
cs = new Cursor(Cursor.HAND_CURSOR); jp1 = new JPanel();
jp1.setLayout(new GridLayout(5, 1));
jl1 = new JLabel("国家管理",SwingConstants.CENTER);
jl1.setCursor(cs);
jl1.setEnabled(false);
jl1.addMouseListener(this); jl2 = new JLabel("人员管理",SwingConstants.CENTER);
jl2.setCursor(cs);
jl2.setEnabled(false);
jl2.addMouseListener(this); jp1.add(jl1);
jp1.add(jl2);
jt = new JTable();
jsp1 = new JScrollPane(jt);
jsp1.setSize(800, 600);
jp3 = new JPanel(new BorderLayout());
jp3.add(jsp1);
//ioe_gaoyong 添加
int a=(int)(w*weight);
jp1.setMinimumSize(new Dimension((int)(w*weight),500));
jp3.setMinimumSize(new Dimension(w-a-10,500));
//添加结束
jsp = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, jp1, jp3);
//这行代码导致了光标效果不能看到
// jsp.setEnabled(false);
jsp.setDividerSize(5);
jsp.setDividerLocation(w1);//这行代码根本没起任何作用,建议删掉
this.add(jsp);
jp4 = new JPanel();
jb1 = new JButton("添加");
jb1.addActionListener(this);
jb2 = new JButton("修改");
jb2.addActionListener(this);
jb3 = new JButton("删除");
jb3.addActionListener(this);
jp4.add(jb1);
jp4.add(jb2);
jp4.add(jb3);
this.add(jp4,"South");
} // 主方法
public MainWindows()
{
this.MainPanel();
this.MainMenu();
this.setTitle("灰太郎管理系统"); Image image = Toolkit.getDefaultToolkit().createImage("/image/htl.jpg");
this.setIconImage(image);
this.setSize(w , h - 28);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true); jsp.setDividerLocation(weight);//added by ioe_gaoyong
} @Override
public void actionPerformed(ActionEvent e)
{ } @Override
public void mouseClicked(MouseEvent e)
{
if (e.getSource() == jl1)
{
String sql = "select * from nation";
String[] pars = {};
um = new UserModel();
um.queryNation(sql, pars);
jt.setModel(um);
}
else if (e.getSource() == jl2)
{
String sql = "select * from heros order by heroid";
String[] pars = {};
um = new UserModel();
um.queryHeros(sql, pars);
jt.setModel(um);
} } @Override
public void mouseEntered(MouseEvent e)
{
if (e.getSource() == jl1)
{
jl1.setEnabled(true);
jl1.setCursor(cs); }
else if (e.getSource() == jl2)
{
jl2.setEnabled(true);
jl2.setCursor(cs);
} } @Override
public void mouseExited(MouseEvent e)
{
if (e.getSource() == jl1)
{
jl1.setEnabled(false);
jl1.setCursor(cs);
}
else if (e.getSource() == jl2)
{
jl2.setEnabled(false);
jl2.setCursor(cs);
} } @Override
public void mousePressed(MouseEvent e)
{
// TODO Auto-generated method stub } @Override
public void mouseReleased(MouseEvent e)
{
// TODO Auto-generated method stub }}
其原理是设置组件的最小大小,如果JSplitPane的左右两个组件加上分隔条的最小大小就充满屏幕,那么分隔条也不能被用户移动了,加了四五行代码,在注释当中标记了