使用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();
jTable1.setSelectionForeground();这个是选中的颜色,我要的是在不选择的情况下,每行的颜色都不一样,希望有别的方法或者代码同样感谢
需要覆盖原有的渲染器。然后在渲染器里面获得每一行,在每一行上面覆盖一个Jlabel。JLabel可以改变颜色。
但是这样子有一个问题,就是你选中了一行以后颜色不会改变。需要自己再增加选中一行改变颜色的代码。
希望能够有所帮助。
我先前还想通过捕获事件repaint来实现呢,呵呵
肯定要用这东西,但是不是 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
问题已经解决了滴 ,同样感谢~希望第二个问题能有人帮忙想想办法,我做了一个测试,能看到一点点效果,具体的就是设定组件的大小和位置了,现在主要的问题是,怎么在悬浮窗口和背后的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也该跟着移动 。希望大家都帮忙顶顶,谢谢
用一个 JPanel 显示 JDialog 内的内容. 再把这个 JPanel 放到一个 JToolBar 中. 最后让 JToolBar 浮动就可以了. 呵呵!!!
/*
* 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();
}
}
不知道有什么比较好的实现,望赐教
收藏这个问题帮你顶 ~~~~关注高手回答~~~
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);
}
};
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) {
}
}
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) {
}
}
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;
}
});
问题是:当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;
}放不下了,后面的直接和上面的连在一起就行了
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) {
}
}
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(" 本站"),
gbs);
jpTop.add(new PopupLabel(" "),
gbs);
jpTop.add(new PopupLabel(" 头等舱:"), gbs);
jpTop.add(getJtfC1(), gbs);
jpTop.add(new PopupLabel(" 商务舱:"), gbs);
jpTop.add(getJtfC2(), gbs);
jpTop.add(new PopupLabel(" 经济舱:"), 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(" 本站货物:"), gbs);
jpBottom.add(getJtfH1(), gbs);
jpBottom.add(new PopupLabel(" 本站行李:"), gbs);
jpBottom.add(getJtfH2(), gbs);
jpBottom.add(new PopupLabel(" 本站邮件:"), gbs);
jpBottom.add(getJtfH3(), gbs);
gbs.gridy++;
jpBottom.add(new PopupLabel(" 过站货物:"), gbs);
jpBottom.add(getJtfH4(), gbs);
jpBottom.add(new PopupLabel(" 过站行李:"), gbs);
jpBottom.add(getJtfH5(), gbs);
jpBottom.add(new PopupLabel(" 过站邮件:"), 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();
}
}
jTable1.setSelectionBackground();
jTable1.setSelectionForeground();