package com.jdhr.view;import java.awt.*;import com.jdhr.*;
import com.jdhr.model.UserModel;import javax.swing.*;
import javax.swing.table.TableModel;import java.awt.event.*;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;
JLabel jl1, jl2;
JScrollPane jsp1;
JSplitPane jsp;
JTable jt;
JButton jb1;
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));

jp2 = new JPanel();
jp3 = new JPanel();
jb1 = new JButton("确定");
jb1.addActionListener(this);
jl1 = new JLabel("国家管理");
jl1.setCursor(cs);
jl1.setEnabled(false);
jl1.addMouseListener(this); jl2 = new JLabel("人员管理");
jl2.setCursor(cs);
jl2.setEnabled(false);
jl2.addMouseListener(this); jp1.add(jl1);
jp1.add(jl2);
jt = new JTable();

jsp1 = new JScrollPane(jt);
jp3.add(jsp1);
jsp = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, jp1, jp3);
jsp.setEnabled(false);
jsp.setDividerSize(5);
jsp.setDividerLocation(w1);
this.add(jsp);
} // 主方法
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";
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); }
else if (e.getSource() == jl2)
{
jl2.setEnabled(true);
} } @Override
public void mouseExited(MouseEvent e)
{
if (e.getSource() == jl1)
{
jl1.setEnabled(false);
}
else if (e.getSource() == jl2)
{
jl2.setEnabled(false);
} } @Override
public void mousePressed(MouseEvent e)
{
// TODO Auto-generated method stub } @Override
public void mouseReleased(MouseEvent e)
{
// TODO Auto-generated method stub }}
简单解释一下:主窗体被拆分成左右两部分jp1和jp3,jp1设置成GridLayout布局,用于放置jlable标签,jp3用于放置Jtable
问题如下:
1、jp1设置成GridLayout后,放置的标签只能是左对齐,我希望设置每行居中对齐
2、jp3放置的jtable只有固定的大小,没法把jp3全部覆盖,请高手解答!

解决方案 »

  1.   

    擦 swing 忘得差不多了 哎
      

  2.   

    (1).这种不规则的布局建议使用null布局方式,自己设置宽,高,左边距,上边距。这个你可以使用Flowlayout试试
    (2).先获取jp3的宽度和高度,然后对应着给jtable的宽度和高度
      

  3.   

    不行啊
    jp3.getHeight();这个方法我也试过了,不行啊
      

  4.   

    推荐使用GridBagLayout布局管理器,这个布局管理器可以实现几乎所有你想要的功能,各种对齐和填充,至少可以解决你说的jtable无法全部填充的问题,印象中设置一个fill属性为BOTH就可以
      

  5.   

    1、使用带有对齐方式的JLabel 构造函数,就行,如下
    jl2 = new JLabel("人员管理",SwingConstants.CENTER);2、jp3 使用边框布局管理器
    jp3.setLayout(new BorderLayout());这样就能实现你的要求了,你导入的两个包 是啥包?