jTable1.setSelectionBackground();
    jTable1.setSelectionForeground();

解决方案 »

  1.   

    jTable1.setSelectionBackground();
        jTable1.setSelectionForeground();这个是选中的颜色,我要的是在不选择的情况下,每行的颜色都不一样,希望有别的方法或者代码同样感谢
      

  2.   

    这个问题比较麻烦。
    需要覆盖原有的渲染器。然后在渲染器里面获得每一行,在每一行上面覆盖一个Jlabel。JLabel可以改变颜色。
    但是这样子有一个问题,就是你选中了一行以后颜色不会改变。需要自己再增加选中一行改变颜色的代码。
    希望能够有所帮助。
      

  3.   

    需要的是实现了的代码,上面的思路我已经做过了,如果是直接implements一个TableCellRenderer,然后继承自JLabel,覆写其中的setValue方法(protected)。没有效果但是如果直接继承一个DefaultTableCellRenderer然后再覆写他的setValue就行了,我也是没弄明白是怎么回事,所以来寻求一下更好的解决办法,最好能有相关的简单代码,谢谢大家protected方法是可以覆写的吧第二个问题我记有一个方法是可以的,希望能给点提示
      

  4.   

    真的一个方法就可以实现悬浮窗口吗?如果有,请楼主一定贴出来,谢谢!!
    我先前还想通过捕获事件repaint来实现呢,呵呵
      

  5.   

    实现 TableCellRenderer 即可,
    肯定要用这东西,但是不是 setValue的问题,
    需要实现这个方法
    getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) 
    这里传入了 row 和 column 你可以判断是不是你要改变颜色的那一行或者列
    然后这里也有 value 和 isSelected 可以供你选择
    你可以根据 value 的类型,判断是用什么 Componet 来描述 value,比如通常情况下 JLabel 就好
    然后你创建一个 JLabel,设置这个 JLabel 的背景色为你需要的颜色通过我会这样写:
    class MyRanderer {
        private JLabel label = new JLabel();
        public Component getTableCellRendererComponent(JTable table, Object value,
                boolean isSelected, boolean hasFocus, int row, int column)  {
             label.setBackground(Color.BLUE);
             label.setText(value.toString());
             return label;
        }
       
    }因为 JTable 会复制返回的这个 Component 用来绘制,所以可以每次返回同一个 Component
      

  6.   

    jamesfancy()边城狂人(James Fancy) :
         问题已经解决了滴 ,同样感谢~希望第二个问题能有人帮忙想想办法,我做了一个测试,能看到一点点效果,具体的就是设定组件的大小和位置了,现在主要的问题是,怎么在悬浮窗口和背后的tabel之间传递焦点的问题,测试代码如下package com.caec.amis.ui.viewPanel;import javax.swing.JFrame;
    import javax.swing.table.DefaultTableModel;
    import javax.swing.JTable;
    import javax.swing.JScrollPane;
    import javax.swing.JPanel;
    import java.awt.BorderLayout;
    import javax.swing.JLabel;
    import java.awt.event.MouseListener;
    import java.awt.event.MouseEvent;
    import java.awt.event.KeyListener;
    import java.awt.event.KeyEvent;
    import javax.swing.JButton;
    import javax.swing.JTextField;
    import javax.swing.JComboBox;
    import java.awt.FlowLayout;
    import javax.swing.JToolTip;public class Test
        extends JFrame
        implements MouseListener, KeyListener {
      JTable jt;
      JPanel jp;
      JTextField jtf = new JTextField(12);
      JButton jb = new JButton("123123123");
      String str[] = {
          "1", "2", "3", "4", "5"};
      JComboBox jcb = new JComboBox(str);
      public Test() {
        String[] str = {
            "1", "2", "3", "4", "5", "6"};
        DefaultTableModel dtm = new DefaultTableModel(str, 50);
        jt = new JTable(dtm);
        jt.addMouseListener(this);
        jt.addKeyListener(this);
        JScrollPane jsp = new JScrollPane(jt);
        JPanel jpTable = new JPanel();
        jpTable.setLayout(new BorderLayout());
        jpTable.add(jsp, BorderLayout.CENTER);
        jpTable.setBounds(20, 20, 600, 400);    jp = new JPanel();
        //jp.setLayout(new FlowLayout(FlowLayout.RIGHT));
        jp.add(jb);
        jb.setBounds(120, 10, 60, 20);
        jp.add(jtf);
        jtf.setBounds(200, 10, 120, 20);
        jp.add(jcb);
        jcb.setBounds(20, 40, 100, 20);
        jp.setBounds(800, 400, 0, 0);
        this.setSize(800, 600);
        this.getContentPane().setLayout(null);
        this.getContentPane().add(jp);
        this.getContentPane().add(jpTable);
        this.setVisible(true);
      }  public static void main(String args[]) {
        new Test();
      }  /**
       * mouseClicked
       *
       * @param e MouseEvent
       */
      public void mouseClicked(MouseEvent e) {
        if (e.getSource() == jt && e.getClickCount() == 1) {
          //jp.setLocation(e.getX(),e.getY());
          jp.setBounds(e.getX(), e.getY(), 200, 100);
          //this.repaint();
        }
      }  /**
       * mouseEntered
       *
       * @param e MouseEvent
       */
      public void mouseEntered(MouseEvent e) {
      }  /**
       * mouseExited
       *
       * @param e MouseEvent
       */
      public void mouseExited(MouseEvent e) {
      }  /**
       * mousePressed
       *
       * @param e MouseEvent
       */
      public void mousePressed(MouseEvent e) {
      }  /**
       * mouseReleased
       *
       * @param e MouseEvent
       */
      public void mouseReleased(MouseEvent e) {
      }  /**
       * keyPressed
       *
       * @param e KeyEvent
       */
      public void keyPressed(KeyEvent e) {
        if (e.getSource() == jt) {
          if (e.getKeyCode() == KeyEvent.VK_DOWN) {        jp.setBounds(200, (jt.getSelectedRow() + 1) * jt.getRowHeight(), 200,
                         100);
          }
          if (e.getKeyCode() == KeyEvent.VK_UP) {        jp.setBounds(200, jt.getSelectedRow() * 18, 200, 100);
          }    }
      }  /**
       * keyReleased
       *
       * @param e KeyEvent
       */
      public void keyReleased(KeyEvent e) {
      }  /**
       * keyTyped
       *
       * @param e KeyEvent
       */
      public void keyTyped(KeyEvent e) {
      }
    }我要达到的效果是这样,点击Tabel出现这个Panel。按上下键这个pAnel跟着动,但是当焦点在这个Panel上的时候,按上下键盘也能使Tabel的行跟着移动,并且这个PAnel也该跟着移动 。希望大家都帮忙顶顶,谢谢
      

  7.   

    你是要在tabel里用Combobox吗?
      

  8.   

    怎么设置一个JDialog一直在Client的上方,但是能对这个Client进行操作,也就是说焦点在Client上有一个简单的方法:
    用一个 JPanel 显示 JDialog 内的内容. 再把这个 JPanel 放到一个 JToolBar 中. 最后让 JToolBar 浮动就可以了.  呵呵!!!
      

  9.   

    使用Popup类,,,这里只是一个小测试,写得不好请谅解,有必要可以重写Popup
    /*
     * Created on 2004-10-15
     *
     * To change the template for this generated file go to
     * Window - Preferences - Java - Code Generation - Code and Comments
     */
    package org.brunt.swing;import java.awt.*;
    import java.awt.event.*;import javax.swing.*;
    import javax.swing.event.*;
    import javax.swing.table.*;
    /**
     * @author ht
     *
     * To change the template for this generated type comment go to
     * Window - Preferences - Java - Code Generation - Code and Comments
     */
    public class TestPopup extends JDialog implements KeyListener{
    static final int LEN = 35;
    JTable table = new JTable(200,5);
    FlowPanel p = new FlowPanel(this);
    Popup popup = null;
    Point point = null;
    public TestPopup(){
    table.setPreferredSize(new Dimension(800,600));
    /*table.getSelectionModel().addListSelectionListener(new ListSelectionListener(){
    public void valueChanged(ListSelectionEvent e){
     int row = e.getFirstIndex();

     selectRow(row,new Point(200,100+10*row));
    }
    });
    */

    table.addMouseListener(new MouseAdapter(){
    public void mouseReleased(MouseEvent e){
    selectRow(table.getSelectedRow(),point = e.getPoint());
    }
    });

    table.addKeyListener(this);

    this.getContentPane().add(new JScrollPane(table));
    }

    //public void selectRow(int nRow){
    // selectRow(nRow,point);
    //}

    public void selectRow(int nRow,Point point){
    if(popup!=null)
    popup.hide();

    popup =PopupFactory.getSharedInstance().getPopup(this.getContentPane(),p,point.x,point.y);
    popup.show();
    }
    public void keyPressed(KeyEvent e){}
      
    public void keyTyped(KeyEvent e){}  public void keyReleased(KeyEvent e)
    {
    System.out.println("key down");
    int row = table.getSelectedRow();
    if(row <0)
    return;

    switch (e.getKeyCode()){
    case KeyEvent.VK_UP:
    if(--row<0)
    return;
    table.getSelectionModel().setSelectionInterval(row,row);

    point.y -= LEN;
    selectRow(row,point);
    case KeyEvent.VK_DOWN:
    if(++row>=table.getRowCount())
    return;
    table.getSelectionModel().setSelectionInterval(row,row);
    point.y+=LEN;
    selectRow(row,point);
    default:
    return;
    }
    }
    class FlowPanel extends JPanel{

    public FlowPanel(KeyListener k){
    super();
    this.setLayout(new BorderLayout());
    this.setBorder(BorderFactory.createLineBorder(Color.red));

    this.addKeyListener(k);
    this.setPreferredSize(new Dimension(200,200));
    this.setSize(new Dimension(200,200));
    }
    }

    public static void main(String[] args) {
    TestPopup d = new TestPopup();
    d.pack();
    d.show();
    }
    }
      

  10.   

    同志们啊,可能是我没说清楚,我现在其实最需要的是一个焦点传递的监听!也就是说,当焦点在浮动窗口上的组件的时候,按键盘的上下键盘把这个焦点传递给table 
    不知道有什么比较好的实现,望赐教
      

  11.   

    hoho
    收藏这个问题帮你顶 ~~~~关注高手回答~~~
      

  12.   

    改变颜色的问题,使用渲染器就可以了!下面是代码
    DefaultTableCellRenderer color = new DefaultTableCellRenderer() {
    protected Object[][] data = null; public Object getValueAt(int row, int column) { return data[row][column]; } public Component getTableCellRendererComponent(
    JTable table,
    Object value,
    boolean isSelected,
    boolean hasFocus,
    int row,
    int column) {
    //使用JTABLE.GETVALUEAT()方法
    取的相应位置上的值进行判断就可以根据需要改变颜色,也可以判断是否被选则来改变颜色
    String temp = (String)table.getValueAt(row ,0);
    if (temp.equals("0")) {
    //削除データ 
    setBackground(Color.red);
    } else if (temp.equals("1")) {
    setBackground(Color.yellow);
    } else if (temp.equals("4")) {
    setBackground(Color.LIGHT_GRAY);
    } else {
    setBackground(Color.white);
    } return super.getTableCellRendererComponent(
    table,
    value,
    isSelected,
    hasFocus,
    row,
    column);
    }
    };
      

  13.   

    import javax.swing.JFrame;
    import javax.swing.table.DefaultTableModel;
    import javax.swing.JTable;
    import javax.swing.JScrollPane;
    import javax.swing.JPanel;
    import java.awt.BorderLayout;
    import javax.swing.JLabel;
    import java.awt.event.MouseListener;
    import java.awt.event.MouseEvent;
    import java.awt.event.KeyListener;
    import java.awt.event.KeyEvent;
    import javax.swing.JButton;
    import javax.swing.JTextField;
    import javax.swing.JComboBox;
    import java.awt.FlowLayout;
    import javax.swing.JToolTip;public class Test
        extends JFrame
        implements MouseListener, KeyListener {
      JTable jt;
      JPanel jp;
      JTextField jtf = new JTextField(12);
      JButton jb = new JButton("123123123");
      String str[] = {
          "1", "2", "3", "4", "5"};
      JComboBox jcb = new JComboBox(str);
      public Test() {
        String[] str = {
            "1", "2", "3", "4", "5", "6"};
        DefaultTableModel dtm = new DefaultTableModel(str, 50);
        jt = new JTable(dtm);
        jt.addMouseListener(this);
        jt.addKeyListener(this);
        JScrollPane jsp = new JScrollPane(jt);
        JPanel jpTable = new JPanel();
        jpTable.setLayout(new BorderLayout());
        jpTable.add(jsp, BorderLayout.CENTER);
        jpTable.setBounds(20, 20, 600, 400);    jp = new JPanel();
        //jp.setLayout(new FlowLayout(FlowLayout.RIGHT));
        jp.add(jb);
        jb.setBounds(120, 10, 60, 20);
        jp.add(jtf);
        jtf.setBounds(200, 10, 120, 20);
        jtf.addKeyListener(this);
        jp.add(jcb);
        jcb.setBounds(20, 40, 100, 20);
        jp.setBounds(800, 400, 0, 0);
        this.setSize(800, 600);
        this.getContentPane().setLayout(null);
        this.getContentPane().add(jp);
        this.getContentPane().add(jpTable);
        this.setVisible(true);
      }  public static void main(String args[]) {
        new Test();
      }  /**
       * mouseClicked
       *
       * @param e MouseEvent
       */
      public void mouseClicked(MouseEvent e) {
        if (e.getSource() == jt && e.getClickCount() == 1) {
          //jp.setLocation(e.getX(),e.getY());
          jp.setBounds(e.getX(), e.getY(), 200, 100);
          //this.repaint();
        }
      }  /**
       * mouseEntered
       *
       * @param e MouseEvent
       */
      public void mouseEntered(MouseEvent e) {
      }  /**
       * mouseExited
       *
       * @param e MouseEvent
       */
      public void mouseExited(MouseEvent e) {
      }  /**
       * mousePressed
       *
       * @param e MouseEvent
       */
      public void mousePressed(MouseEvent e) {
      }  /**
       * mouseReleased
       *
       * @param e MouseEvent
       */
      public void mouseReleased(MouseEvent e) {
      }  /**
       * keyPressed
       *
       * @param e KeyEvent
       */
      public void keyPressed(KeyEvent e) {
        if (e.getSource() == jt) {
          if (e.getKeyCode() == KeyEvent.VK_DOWN) {        jp.setBounds(200, (jt.getSelectedRow() + 1) * jt.getRowHeight(), 200,
                         100);
          }
          if (e.getKeyCode() == KeyEvent.VK_UP) {        jp.setBounds(200, jt.getSelectedRow() * 18, 200, 100);
          }    }else if(e.getSource() == jtf){
         int keycode = e.getKeyCode();
         int selectRow = jt.getSelectedRow();
        
         if(keycode == KeyEvent.VK_UP){
         System.out.println(selectRow);
    if(selectRow>0)
    selectRow--;
    jt.getSelectionModel().setSelectionInterval(selectRow,selectRow);
    System.out.println(selectRow);

    jp.setBounds(200, jt.getSelectedRow() * 18, 200, 100);
    jtf.requestFocus();

         }else if(keycode == KeyEvent.VK_DOWN){
         if(selectRow<jt.getRowCount())
         selectRow++;
         jt.getSelectionModel().setSelectionInterval(selectRow,selectRow);
        
    jp.setBounds(200, jt.getSelectedRow() * 18, 200, 100);
    jtf.requestFocus();
         }   
        

        }
      }  /**
       * keyReleased
       *
       * @param e KeyEvent
       */
      public void keyReleased(KeyEvent e) {
      }  /**
       * keyTyped
       *
       * @param e KeyEvent
       */
      public void keyTyped(KeyEvent e) {
      }
    }
      

  14.   

    requestFocus对jtf有效果,但是如果换成jb就没有效果了,我之前试的是对这个jp加上监听,也是requestFocus,同样没有效果,郁闷以前这套软件是用pb做的,用它的什么dadawindow很轻松就能实现,在这边我都试了好久都没效果
      

  15.   

    =================================================================================
    requestFocus对jtf有效果,但是如果换成jb就没有效果了,我之前试的是对这个jp加上监听,也是requestFocus,同样没有效果,郁闷        ==============错误
    ==================================================================================
    import javax.swing.JFrame;
    import javax.swing.table.DefaultTableModel;
    import javax.swing.JTable;
    import javax.swing.JScrollPane;
    import javax.swing.JPanel;
    import javax.swing.JComponent;
    import java.awt.BorderLayout;
    import javax.swing.JLabel;
    import java.awt.event.MouseListener;
    import java.awt.event.MouseEvent;
    import java.awt.event.KeyListener;
    import java.awt.event.KeyEvent;
    import javax.swing.JButton;
    import javax.swing.JTextField;
    import javax.swing.JComboBox;
    import java.awt.FlowLayout;
    import javax.swing.JToolTip;public class Test
        extends JFrame
        implements MouseListener, KeyListener {
      JTable jt;
      JPanel jp;
      JTextField jtf = new JTextField(12);
      JButton jb = new JButton("123123123");
      String str[] = {
          "1", "2", "3", "4", "5"};
      JComboBox jcb = new JComboBox(str);
      public Test() {
        String[] str = {
            "1", "2", "3", "4", "5", "6"};
        DefaultTableModel dtm = new DefaultTableModel(str, 50);
        jt = new JTable(dtm);
        jt.addMouseListener(this);
        jt.addKeyListener(this);
        JScrollPane jsp = new JScrollPane(jt);
        JPanel jpTable = new JPanel();
        jpTable.setLayout(new BorderLayout());
        jpTable.add(jsp, BorderLayout.CENTER);
        jpTable.setBounds(20, 20, 600, 400);    jp = new JPanel();
        jp.setBorder(javax.swing.BorderFactory.createLineBorder(java.awt.Color.red));
        //jp.setLayout(new FlowLayout(FlowLayout.RIGHT));
        jp.add(jb);    
        jp.add(jtf);
    jp.add(jcb);

    jtf.setBounds(50, 0, 100, 20);
    jb.setBounds(50, 30, 100, 20);
    jcb.setBounds(50,60, 100, 20);

        jtf.addKeyListener(this);    
        jb.addKeyListener(this);
        jp.addKeyListener(this);
        jcb.addKeyListener(this);
        

        //jp.setBounds(800, 400, 0, 0);
        this.setSize(800, 600);
        this.getContentPane().setLayout(null);
        this.getContentPane().add(jp);
        this.getContentPane().add(jpTable);
        this.setVisible(true);
      }  public static void main(String args[]) {
        new Test();
      }  /**
       * mouseClicked
       *
       * @param e MouseEvent
       */
      public void mouseClicked(MouseEvent e) {
        if (e.getSource() == jt && e.getClickCount() == 1) {
          //jp.setLocation(e.getX(),e.getY());
          jp.setBounds(e.getX(), e.getY(), 200, 100);
          //this.repaint();
        }
        
        //jp.requestFocus();
      }  /**
       * mouseEntered
       *
       * @param e MouseEvent
       */
      public void mouseEntered(MouseEvent e) {
      }  /**
       * mouseExited
       *
       * @param e MouseEvent
       */
      public void mouseExited(MouseEvent e) {
      }  /**
       * mousePressed
       *
       * @param e MouseEvent
       */
      public void mousePressed(MouseEvent e) {
      }  /**
       * mouseReleased
       *
       * @param e MouseEvent
       */
      public void mouseReleased(MouseEvent e) {
      }  /**
       * keyPressed
       *
       * @param e KeyEvent
       */
      public void keyPressed(KeyEvent e) {
       int selectedRow = jt.getSelectedRow();
      
    int keycode = e.getKeyCode();
    if(keycode == KeyEvent.VK_DOWN){
    if(selectedRow<jt.getRowCount()-1)
    selectedRow++;
    else
    return;
       }else if(keycode == KeyEvent.VK_UP){
    if(selectedRow >0)
    selectedRow--;
    else
      return;
    }else{
    return;
    }

    jt.getSelectionModel().setSelectionInterval(selectedRow,selectedRow);
    jp.setBounds(200,selectedRow*18,200,100);


       JComponent sourceComponent = (JComponent)e.getSource();
       sourceComponent.requestFocus();
       System.out.println(sourceComponent.getClass().getName());
      }  /**
       * keyReleased
       *
       * @param e KeyEvent
       */
      public void keyReleased(KeyEvent e) {
      }  /**
       * keyTyped
       *
       * @param e KeyEvent
       */
      public void keyTyped(KeyEvent e) {
      }
    }
      

  16.   

    另外楼主注意到了吗,你这种使用MouseListener的方式使得选择table滚动条下方的行时,计算的Point有问题(甚至显示不出FlowPanel)。
      

  17.   

    for (int i = 0; i < tableModel.getColumnCount(); i++) {
    table.getColumnModel().getColumn(i).setPreferredWidth(
    tableModel.columns[i].width);
    table.getColumnModel().getColumn(
    i).setCellRenderer(new DefaultTableCellRenderer() {
    public Component getTableCellRendererComponent(
    JTable table,
    Object value,
    boolean isSelected,
    boolean hasFocus,
    int row,
    int column) {
    super.getTableCellRendererComponent(
    table,
    value,
    isSelected,
    hasFocus,
    row,
    column);
    this.setBackground(
    isSelected
    ? SystemColor.textHighlight
    : row % 2 == 0
    ? Color.LIGHT_GRAY
    : Color.WHITE);
    return this;
    }
    });
      

  18.   

    我来了,采纳了楼上一位仁兄的建议,使用了Popup,基本上还算是可以,现在还有就是在Table上需要不需要加这个KeyListener的问题,我把代码贴出来,大家试一下先!
    问题是:当Table用键盘控制它的SelectedRow的时候,看见的和实际选择中的row不一样,大家帮忙看看!
    Table麻烦大家自己重构一下,里面的ThreadGo方法是填充数据的,大家可以不调用这个方法,自己填充一些假的数据,谢谢!!!这是主视图package com.caec.amis.ui.viewpane;/**
     * PopupPanel是一个界面,放到这中间申明的那个Popup上就行了,
     * 监听在Test里面,只要将e.getSource()转换成JCompontent
     * 然后再调用requestFouce的方法就行了
     * */
    import javax.swing.JPanel;
    import com.caec.amis.ui.table.TableView;
    import com.caec.amis.ui.table.DefaultTableViewModel;
    import javax.swing.JRadioButton;
    import javax.swing.JLabel;
    import com.caec.amis.ui.table.CreateTableHelper;
    import java.awt.BorderLayout;
    import java.awt.FlowLayout;
    import javax.swing.ButtonGroup;
    import javax.swing.JScrollPane;
    import java.awt.Font;
    import javax.swing.UIManager;
    import javax.swing.border.TitledBorder;
    import javax.swing.table.TableColumnModel;
    import javax.swing.table.TableColumn;
    import com.caec.amis.ui.table.MultiLineHeaderRenderer;
    import java.util.List;
    import com.caec.amis.command.GenerticCommand;
    import java.util.HashMap;
    import com.caec.amis.command.CommandHandler;
    import org.springframework.richclient.application.Application;
    import com.caec.amis.view.ClientView;
    import java.rmi.RemoteException;
    import org.springframework.dao.DataAccessException;
    import java.util.Iterator;
    import com.caec.amis.model.DynFlight;
    import com.caec.amis.view.CompactFlightView;
    import javax.swing.JPopupMenu;
    import javax.swing.JMenuItem;
    import java.awt.event.MouseListener;
    import java.awt.event.ActionListener;
    import java.awt.event.ActionEvent;
    import java.awt.event.MouseEvent;
    import javax.swing.Popup;
    import javax.swing.PopupFactory;
    import java.awt.Point;
    import java.awt.event.KeyListener;
    import java.awt.event.KeyEvent;
    import javax.swing.JComponent;
    import com.caec.amis.ui.GenernericUiParams;
    import com.caec.amis.runtime.AccessServiceConstant;
    import com.caec.amis.access.LocalDb;public class DistributionPanel
        extends JPanel
        implements MouseListener, ActionListener, KeyListener {
      TableView tv;
      DefaultTableViewModel dtvm;
      JPanel jpBottom;
      JRadioButton jrbInAndOut, jrbOut, jrbIn;
      JLabel jlInfo;
      JPopupMenu jpm;
      JMenuItem jmi1, jmi2;
      PopupPanel pp;
      Popup popup = null;
      int a = Thread.activeCount();
      Thread th;  public DistributionPanel() {
        initialize();
      }  public void initialize() {
        Font f = new Font("dialog", Font.PLAIN, 12);
        UIManager.put("dialog.font", f);
        UIManager.put("optionPane.font", f);
        UIManager.put("button.font", f);
        UIManager.put("Label.font", f);
        UIManager.put("TextField.font", f);
        UIManager.put("RadioButton.font", new Font("dialog", Font.PLAIN, 16));
        UIManager.put("PopupMenu.font", f);
        UIManager.put("MenuItem.font", f);    this.setLayout(new BorderLayout());
        JScrollPane jsp = new JScrollPane();
        jsp.setViewportView(getTv());
        this.add(jsp, BorderLayout.CENTER);
        this.add(getJpBottom(), BorderLayout.SOUTH);
        this.addMouseListener(this);
        ThreadGo();
      }  public void ThreadGo() {
        System.out.println(th.activeCount() + "aaaaaaaa" + a);
        getJlInfo().setText("<html><font color=#FF0000>正在接受数据</font></html>");
        th = new Thread(new Runnable() {
          public void run() {
            getDtvm().clear();
            List dys = (List) LocalDb
            .getEntityList(AccessServiceConstant.DYN_FLIGHT_LOADALL);
        Iterator items = dys.iterator();
            DynFlight df;
            CompactFlightView cfv;
            while (items.hasNext()) {
              df = (DynFlight) items.next();
              cfv = new CompactFlightView(df, true);
              getDtvm().addRow(cfv);
            }
            getJlInfo().setText("");
          }
        });
        th.start();
      }  public TableView getTv() {
        if (tv == null) {
          tv = new TableView(getDtvm());
          tv.setSelectionMode(0);
          TableColumnModel tcm = tv.getColumnModel();
          for (int i = 0; i < 19; i++) {
            TableColumn tc = tcm.getColumn(i);
            MultiLineHeaderRenderer mlhr = new MultiLineHeaderRenderer();
            tc.setHeaderRenderer(mlhr);
          }
          tv.getTableHeader().setReorderingAllowed(false);
          tv.addMouseListener(this);
          tv.addKeyListener(this);
        }
        return tv;
      }  public DefaultTableViewModel getDtvm() {
        if (dtvm == null) {
          dtvm = CreateTableHelper.createTableViewModel(
              "com.caec.amis.view.CompactFlightView");
        }
        return dtvm;
      }  public JPanel getJpBottom() {
        if (jpBottom == null) {
          jpBottom = new JPanel();
          jpBottom.setLayout(new FlowLayout(FlowLayout.LEFT, 20, 5));
          JPanel jpLeft = new JPanel();
          jpLeft.setLayout(new FlowLayout(FlowLayout.CENTER, 10, 10));
          jpLeft.setBorder(new TitledBorder(""));
          ButtonGroup bg = new ButtonGroup();
          bg.add(getJrbInAndOut());
          bg.add(getJrbIn());
          bg.add(getJrbOut());
          jpLeft.add(getJrbInAndOut());
          jpLeft.add(getJrbOut());
          jpLeft.add(getJrbIn());
          jpBottom.add(getJlInfo());
          jpBottom.add(jpLeft);
        }
        return jpBottom;
      }  public JRadioButton getJrbInAndOut() {
        if (jrbInAndOut == null) {
          jrbInAndOut = new JRadioButton("进出港");
          jrbInAndOut.setSelected(true);
        }
        return jrbInAndOut;
      }  public JRadioButton getJrbOut() {
        if (jrbOut == null) {
          jrbOut = new JRadioButton("出港");
        }
        return jrbOut;
      }  public JRadioButton getJrbIn() {
        if (jrbIn == null) {
          jrbIn = new JRadioButton("进港");
        }
        return jrbIn;
      }放不下了,后面的直接和上面的连在一起就行了
      

  19.   

    public JLabel getJlInfo() {
        if (jlInfo == null) {
          jlInfo = new JLabel("<html><font color=#FF0000>正在接受数据</font></html>");
        }
        return jlInfo;
      }  public JMenuItem getJmi2() {
        if (jmi2 == null) {
          jmi2 = new JMenuItem("送仓单");
          jmi2.addActionListener(this);
        }
        return jmi2;
      }  public JMenuItem getJmi1() {
        if (jmi1 == null) {
          jmi1 = new JMenuItem("配载信息...");
          jmi1.addActionListener(this);
        }
        return jmi1;
      }  public JPopupMenu getJpm() {
        if (jpm == null) {
          jpm = new JPopupMenu();
          jpm.add(getJmi1());
          jpm.addSeparator();
          jpm.add(getJmi2());
        }
        return jpm;
      }  public PopupPanel getPp() {
        if (pp == null) {
          pp = new PopupPanel();
          pp.addKeyListener(this);
          pp.getJtfC1().addKeyListener(this);
          pp.getJtfC2().addKeyListener(this);
          pp.getJtfC3().addKeyListener(this);
          pp.getJtfH1().addKeyListener(this);
          pp.getJtfH2().addKeyListener(this);
          pp.getJtfH3().addKeyListener(this);
          pp.getJtfH4().addKeyListener(this);
          pp.getJtfH5().addKeyListener(this);
          pp.getJtfH6().addKeyListener(this);
          pp.getJtfP1().addKeyListener(this);
          pp.getJtfP2().addKeyListener(this);
          pp.getJtfP3().addKeyListener(this);
          pp.getJtfP4().addKeyListener(this);
          pp.getJtfP5().addKeyListener(this);
          pp.getJtfP6().addKeyListener(this);
          pp.getJtfP7().addKeyListener(this);
          pp.getJtfP8().addKeyListener(this);
          pp.getJtfP9().addKeyListener(this);
          pp.getJtfP10().addKeyListener(this);
          pp.getJtfP11().addKeyListener(this);
          pp.getJtfP12().addKeyListener(this);
        }
        return pp;
      }  public Popup getPopup(int nRow, Point point) {
        if (popup != null) {
          popup.hide();
        }
        if (point == null) {
          popup = PopupFactory.getSharedInstance().getPopup(this, getPp(),
              400, nRow * 18 + 160);
        }
        else {
          popup = PopupFactory.getSharedInstance().getPopup(this, getPp(),
              400, point.y + 160);
        }
        popup.show();
        return popup;
      }  /**
       * actionPerformed
       *
       * @param e ActionEvent
       */
      public void actionPerformed(ActionEvent e) {
        if (e.getSource() == getJmi1()) {
          getPopup(getTv().getSelectedRow(), null);
        }
        if (e.getSource() == getJmi2()) {
          getPopup(0, null).hide();
        }
      }  /**
       * mouseClicked
       *
       * @param e MouseEvent
       */
      public void mouseClicked(MouseEvent me) {
        if (me.getButton() == MouseEvent.BUTTON3) {
          getJpm().show(me.getComponent(), me.getX(), me.getY());
          getJpm().setVisible(true);
        }
        if (me.getButton() == MouseEvent.BUTTON1) {
          getPopup(1, me.getPoint());
          getPp().getJtfC1().setText(getTv().getSelectedRow()+"");
        }
      }  /**
       * mouseEntered
       *
       * @param e MouseEvent
       */
      public void mouseEntered(MouseEvent e) {
      }  /**
       * mouseExited
       *
       * @param e MouseEvent
       */
      public void mouseExited(MouseEvent e) {
      }  /**
       * mousePressed
       *
       * @param e MouseEvent
       */
      public void mousePressed(MouseEvent e) {
      }  /**
       * mouseReleased
       *
       * @param e MouseEvent
       */
      public void mouseReleased(MouseEvent e) {
      }  /**
       * keyPressed
       *
       * @param e KeyEvent
       */
      public void keyPressed(KeyEvent e) {
        int selectedRow = getTv().getSelectedRow();
        System.out.println(selectedRow);
        int keycode = e.getKeyCode();
        if (e.getSource() == getTv()) {
          if(keycode == KeyEvent.VK_DOWN)
          {
            getPopup(selectedRow, null);
            getPp().getJtfC1().setText(getTv().getSelectedRow()+"a");
          }
          else
            if(keycode == KeyEvent.VK_UP)
            {
              getPopup(selectedRow, null);
              getPp().getJtfC1().setText(selectedRow+"b");
            }
            System.out.println(getTv().getSelectedRow());
           }
        else {
          if (keycode == KeyEvent.VK_DOWN) {
            if (selectedRow < getTv().getRowCount() - 1) {
              selectedRow++;
            }
            else {
              return;
            }
          }
          else if (keycode == KeyEvent.VK_UP) {
            if (selectedRow > 0) {
              selectedRow--;
            }
            else {
              return;
            }
          }
          else {
            return;
          }
          getTv().requestFocus();
          getTv().getSelectionModel().setSelectionInterval(selectedRow, selectedRow);
          ((javax.swing.JComponent)e.getSource()).requestFocus();
          getPp().getJtfC1().setText(getTv().getSelectedRow()+"");
        }
      }  /**
       * keyReleased
       *
       * @param e KeyEvent
       */
      public void keyReleased(KeyEvent e) {
      }  /**
       * keyTyped
       *
       * @param e KeyEvent
       */
      public void keyTyped(KeyEvent e) {
      }
    }
      

  20.   

    还有两个类,都放在一个包下面就行了
    package com.caec.amis.ui.viewpane;import javax.swing.JLabel;/**复写的一个Label
     * <p>Title: </p>
     * <p>Description: </p>
     * <p>Copyright: Copyright (c) 2004</p>
     * <p>Company: </p>
     * @author not attributable
     * @version 1.0
     */public class PopupLabel extends JLabel {  public PopupLabel() {
      }  public PopupLabel(String p0) {
        super("<html><table bgcolor=#C6DFC6>"+p0+"</table></html>",JLabel.RIGHT);
      }}————————————————————弹出的面板——————————————————
    package com.caec.amis.ui.viewpane;import javax.swing.JPanel;
    import javax.swing.JTextField;
    import java.awt.Font;
    import javax.swing.UIManager;
    import java.awt.GridBagLayout;
    import java.awt.GridBagConstraints;
    import java.awt.Insets;
    import javax.swing.JFrame;
    import java.awt.BorderLayout;
    import com.caec.amis.model.DynLoadPlanning;public class PopupPanel
        extends JPanel {
      public JTextField jtfC1, jtfC2, jtfC3;
      public JTextField jtfP1, jtfP2, jtfP3, jtfP4, jtfP5, jtfP6, jtfP7, jtfP8,
          jtfP9, jtfP10, jtfP11, jtfP12;
      public JTextField jtfH1, jtfH2, jtfH3, jtfH4, jtfH5, jtfH6;  //DynLoadPlanning dp;DynLoadPlanning dp
      public PopupPanel() {
        //this.dp=dp;
        initialize();
      }  public void initialize() {
        Font f = new Font("dialog", Font.PLAIN, 12);
        UIManager.put("Label.font", f);
        UIManager.put("TextField.font", f);
        JPanel jpTop=new JPanel();
        jpTop.setLayout(new GridBagLayout());
        GridBagConstraints gbs = new GridBagConstraints();
        gbs.anchor = GridBagConstraints.WEST;
        gbs.fill = GridBagConstraints.NONE;
        gbs.insets = new Insets(0, 0, 0, 0);
        gbs.gridy = 1;
        jpTop.add(new PopupLabel("&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;本站"),
                 gbs);
        jpTop.add(new PopupLabel("&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"),
                 gbs);
        jpTop.add(new PopupLabel("&nbsp;&nbsp;&nbsp;&nbsp;头等舱:"), gbs);
        jpTop.add(getJtfC1(), gbs);
        jpTop.add(new PopupLabel("&nbsp;&nbsp;&nbsp;&nbsp;商务舱:"), gbs);
        jpTop.add(getJtfC2(), gbs);
        jpTop.add(new PopupLabel("&nbsp;&nbsp;&nbsp;&nbsp;经济舱:"), gbs);
        jpTop.add(getJtfC3(), gbs);    gbs.gridy++;
        jpTop.add(new PopupLabel("本站总人数:"), gbs);
        jpTop.add(getJtfP1(), gbs);
        jpTop.add(new PopupLabel("本站成人:"), gbs);
        jpTop.add(getJtfP2(), gbs);
        jpTop.add(new PopupLabel("本站儿童:"), gbs);
        jpTop.add(getJtfP3(), gbs);
        jpTop.add(new PopupLabel("本站婴儿:"), gbs);
        jpTop.add(getJtfP4(), gbs);    gbs.gridy++;
        jpTop.add(new PopupLabel("过站总人数:"), gbs);
        jpTop.add(getJtfP5(), gbs);
        jpTop.add(new PopupLabel("过站成人:"), gbs);
        jpTop.add(getJtfP6(), gbs);
        jpTop.add(new PopupLabel("过站儿童:"), gbs);
        jpTop.add(getJtfP7(), gbs);
        jpTop.add(new PopupLabel("过站婴儿:"), gbs);
        jpTop.add(getJtfP8(), gbs);    gbs.gridy++;
        jpTop.add(new PopupLabel("中转总人数:"), gbs);
        jpTop.add(getJtfP9(), gbs);
        jpTop.add(new PopupLabel("中转成人:"), gbs);
        jpTop.add(getJtfP10(), gbs);
        jpTop.add(new PopupLabel("中转儿童:"), gbs);
        jpTop.add(getJtfP11(), gbs);
        jpTop.add(new PopupLabel("中转婴儿:"), gbs);
        jpTop.add(getJtfP12(), gbs);
        JPanel jpBottom=new JPanel();
        jpBottom.setLayout(new GridBagLayout());
        gbs.fill=GridBagConstraints.BOTH;
        gbs.gridy=1;
        jpBottom.add(new PopupLabel("&nbsp;&nbsp;&nbsp;&nbsp;本站货物:"), gbs);
        jpBottom.add(getJtfH1(), gbs);
        jpBottom.add(new PopupLabel("&nbsp;&nbsp;本站行李:"), gbs);
        jpBottom.add(getJtfH2(), gbs);
        jpBottom.add(new PopupLabel("&nbsp;&nbsp;本站邮件:"), gbs);
        jpBottom.add(getJtfH3(), gbs);
        gbs.gridy++;
        jpBottom.add(new PopupLabel("&nbsp;&nbsp;&nbsp;&nbsp;过站货物:"), gbs);
        jpBottom.add(getJtfH4(), gbs);
        jpBottom.add(new PopupLabel("&nbsp;&nbsp;过站行李:"), gbs);
        jpBottom.add(getJtfH5(), gbs);
        jpBottom.add(new PopupLabel("&nbsp;&nbsp;过站邮件:"), gbs);
        jpBottom.add(getJtfH6(), gbs);    this.setLayout(new BorderLayout());
        this.add(jpTop,BorderLayout.CENTER);
        this.add(jpBottom,BorderLayout.SOUTH);
      }  public JTextField getJtfP2() {
        if (jtfP2 == null) {
          jtfP2 = new JTextField(4);
        }
        return jtfP2;
      }  public JTextField getJtfP5() {
        if (jtfP5 == null) {
          jtfP5 = new JTextField(4);
        }    return jtfP5;
      }  public JTextField getJtfP12() {
        if (jtfP12 == null) {
          jtfP12 = new JTextField(4);
        }    return jtfP12;
      }  public JTextField getJtfP11() {
        if (jtfP11 == null) {
          jtfP11 = new JTextField(4);
        }    return jtfP11;
      }  public JTextField getJtfH5() {
        if (jtfH5 == null) {
          jtfH5 = new JTextField(7);
        }    return jtfH5;
      }  public JTextField getJtfH2() {
        if (jtfH2 == null) {
          jtfH2 = new JTextField(7);
        }    return jtfH2;
      }  public JTextField getJtfC3() {
        if (jtfC3 == null) {
          jtfC3 = new JTextField(4);
        }
        return jtfC3;
      }  public JTextField getJtfP8() {
        if (jtfP8 == null) {
          jtfP8 = new JTextField(4);
        }
        return jtfP8;
      }  public JTextField getJtfP4() {
        if (jtfP4 == null) {
          jtfP4 = new JTextField(4);
        }
        return jtfP4;
      }  public JTextField getJtfP9() {
        if (jtfP9 == null) {
          jtfP9 = new JTextField(4);
        }
        return jtfP9;
      }  public JTextField getJtfP1() {
        if (jtfP1 == null) {
          jtfP1 = new JTextField(4);
        }
        return jtfP1;
      }  public JTextField getJtfP6() {
        if (jtfP6 == null) {
          jtfP6 = new JTextField(4);
        }
        return jtfP6;
      }  public JTextField getJtfH6() {
        if (jtfH6 == null) {
          jtfH6 = new JTextField(7);
        }
        return jtfH6;
      }  public JTextField getJtfH1() {
        if (jtfH1 == null) {
          jtfH1 = new JTextField(7);
        }
        return jtfH1;
      }  public JTextField getJtfC2() {
        if (jtfC2 == null) {
          jtfC2 = new JTextField(4);
        }
        return jtfC2;
      }  public JTextField getJtfP7() {
        if (jtfP7 == null) {
          jtfP7 = new JTextField(4);
        }
        return jtfP7;
      }  public JTextField getJtfH4() {
        if (jtfH4 == null) {
          jtfH4 = new JTextField(7);
        }
        return jtfH4;
      }  public JTextField getJtfC1() {
        if (jtfC1 == null) {
          jtfC1 = new JTextField(4);
        }    return jtfC1;
      }  public JTextField getJtfP10() {
        if (jtfP10 == null) {
          jtfP10 = new JTextField(4);
        }
        return jtfP10;
      }  public JTextField getJtfP3() {
        if (jtfP3 == null) {
          jtfP3 = new JTextField(4);
        }
        return jtfP3;
      }  public JTextField getJtfH3() {
        if (jtfH3 == null) {
          jtfH3 = new JTextField(7);
        }
        return jtfH3;
      }  public static void main(String args[]) {
        JFrame f = new JFrame();
        f.getContentPane().add(new PopupPanel());
        f.pack();
        f.show();
      }
    }
      

  21.   


    jTable1.setSelectionBackground();
    jTable1.setSelectionForeground();