62,623
社区成员
发帖
与我相关
我的任务
分享
import java.awt.BorderLayout;
import java.awt.FlowLayout;
import java.awt.FontMetrics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionAdapter;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.UIManager;
import javax.swing.table.DefaultTableModel;
public class CellToolTipTable extends JFrame
{
private static final long serialVersionUID = 2462831262086443689L;
private static Object[][] data = new String[][] {
{ "01234567890123456789", "abcdefgh igklmnopq rstuvwxyz" },
{ "01234567890123456789012345678901234567890123456789",
"abcd efghi gklm nopq rstu vwx yz abcd efgh igkl mno pqr stu vwx yz" },
{ "00000000 00000000 00000 000000000 00000000 000000000 0000000000000000000000 000000000000000000000000",
"ABCDEFG HIGKLMNO PQRSTUV WXYZAB CDEFGH IGKLMNOPQRSTUV WXYZABCDEFGHIGKLMN OPQRSTUVWXYZ" },
{ "就算天空再深 看不出裂痕 眉头仍聚满密云 就算一屋暗灯 照不穿我身 仍可反映你心 让这口烟跳升 我身躯下沉 曾多么想多么想贴近 你的心和眼 口和耳亦没缘份 我都捉不紧",
"#就算天空再深看不出裂痕眉头仍聚满密云AAAAAAAAAAAAAAAAAAAAAAA就算一屋暗灯照不穿我身仍可反映你心aaaaaaaaaaaaaaaaaaaa0000000000000000000#" },
{ "就算天空再深看不出裂痕眉头仍聚满密云就算一屋暗灯照不穿我身仍可反映你心让这口烟跳升我身躯下沉曾多么想多么想贴近你的心和眼口和耳亦没缘份我都捉不紧",
"#AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA#" } };
private static Object[] columnNames = new String[] { "T0", "T1" };
private JScrollPane scrollPane = new JScrollPane();
private DefaultTableModel model = new DefaultTableModel(data, columnNames);
private JTable table = new JTable(model);
private JPanel buttonPane = new JPanel();
private JButton okButton = new JButton("OK");
private static final int MAX_TOOLTIP_WIDTH = 400;
public CellToolTipTable()
{
table.addMouseMotionListener(new MouseMotionAdapter()
{
public void mouseMoved(MouseEvent e)
{
int row = table.rowAtPoint(e.getPoint());
int column = table.columnAtPoint(e.getPoint());
Object value = table.getValueAt(row, column);
if ((value != null) && (value.toString().length() != 0))
{
int columnWidth = table.getColumnModel().getColumn(column).getWidth();
FontMetrics fm = table.getFontMetrics(table.getFont());
String valueString = value.toString();
int valueStringWidth = fm.stringWidth(valueString);
System.out.println("valueStringWidth = " + valueStringWidth);
if (valueStringWidth + 3 >= columnWidth)
{
if (valueStringWidth > MAX_TOOLTIP_WIDTH)
{
StringBuffer sb = new StringBuffer();
sb.append("<HTML><BODY><DIV width=");
sb.append(MAX_TOOLTIP_WIDTH);
sb.append(">");
sb.append(valueString);
sb.append("</DIV></BODY></HTML>");
table.setToolTipText(sb.toString());
}
else
{
table.setToolTipText(valueString);
}
}
else
{
table.setToolTipText(null);
}
}
else
{
table.setToolTipText(null);
}
}
});
scrollPane.getViewport().add(table);
okButton.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
System.exit(0);
}
});
buttonPane.setLayout(new FlowLayout(FlowLayout.RIGHT));
buttonPane.add(okButton);
getContentPane().setLayout(new BorderLayout());
getContentPane().add(scrollPane, BorderLayout.CENTER);
getContentPane().add(buttonPane, BorderLayout.SOUTH);
}
public static void main(String[] args)
{
try
{
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
}
catch (Exception ex)
{
ex.printStackTrace();
}
JFrame.setDefaultLookAndFeelDecorated(true);
CellToolTipTable frame = new CellToolTipTable();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(400, 300);
frame.setLocation(200, 200);
frame.setVisible(true);
}
}
import java.awt.event.*;
import javax.swing.*;
import java.awt.Point;
public class TestDlg
extends JDialog implements MouseMotionListener,MouseListener {
private int nowRow=-1;
private int nowColumn=-1;
public TestDlg() {
try {
jbInit();
}
catch (Exception ex) {
ex.printStackTrace();
}
}
public static void main(String args[]) {
TestDlg dlg = new TestDlg();
dlg.setSize(600, 480);
dlg.setLocationRelativeTo(null);
dlg.setVisible(true);
}
private void jbInit() throws Exception {
this.getContentPane().add(jScrollPane1, java.awt.BorderLayout.CENTER);
jScrollPane1.getViewport().add(tab);
for (int i = 0; i < 6; i++) {
for (int j = 0; j < 3; j++) {
tab.setValueAt(tab.getColumnName(j) + (i + 1), i, j);
}
}
tab.addMouseListener(this);
tab.addMouseMotionListener(this);
dlg.setSize(200,200);
dlg.add(area);
}
JScrollPane jScrollPane1 = new JScrollPane();
JTable tab = new JTable(6, 3);
JDialog dlg=new JDialog(this);
JTextArea area=new JTextArea();
public void mouseDragged(MouseEvent e) {
}
public void mouseMoved(MouseEvent e) {
if(tab!=null){
int newRow=tab.rowAtPoint(e.getPoint());
int newColum=tab.columnAtPoint(e.getPoint());
if (newRow != nowRow||newColum!=nowColumn) {
if(dlg.isVisible()){
tab.setValueAt(area.getText(),nowRow,nowColumn);
}
nowColumn=newColum;
nowRow=newRow;
dlg.setVisible(false);
}
}
}
public void mouseClicked(MouseEvent e) {
}
public void mousePressed(MouseEvent e) {
}
public void mouseReleased(MouseEvent e) {
if (e.getButton() == 3) {
Object ob = tab.getValueAt(nowRow, nowColumn);
area.setText(ob.toString());
dlg.setLocationRelativeTo(this);
Point p = e.getPoint();
Point p2 = tab.getLocationOnScreen();
p.setLocation(p.getX() + p2.getX(), p.getY() + p2.getY());
dlg.setLocation(p);
dlg.setVisible(true);
}
}
public void mouseEntered(MouseEvent e) {
}
public void mouseExited(MouseEvent e) {
}
}