Java 将对象与JTable上的单元格关联
我试图将Ellipse2D对象与JTable上的单元格相关联。特别是,如果用户单击一个Ellipse2D,它将突出显示JTable上的一个单元格并接受输入。我需要以允许用户将字符串与每个椭圆关联的方式来执行此操作 我想做的事情可能吗?如果可能,我该怎么做Java 将对象与JTable上的单元格关联,java,swing,jtable,Java,Swing,Jtable,我试图将Ellipse2D对象与JTable上的单元格相关联。特别是,如果用户单击一个Ellipse2D,它将突出显示JTable上的一个单元格并接受输入。我需要以允许用户将字符串与每个椭圆关联的方式来执行此操作 我想做的事情可能吗?如果可能,我该怎么做 import java.awt.*; import java.awt.geom.*; import java.util.*; import java.util.List; import javax.swing.*; public class
import java.awt.*;
import java.awt.geom.*;
import java.util.*;
import java.util.List;
import javax.swing.*;
public class SelfContainedExample extends JPanel {
private List<Shape> shapes = new ArrayList<>();
public static void main(String[] args)
{
EventQueue.invokeLater(() -> createAndShowGUI());
}
public SelfContainedExample()
{
//Circle of Radios
shapes.add(new Ellipse2D.Double(250, 100, 20, 20));
shapes.add(new Ellipse2D.Double(160, 100, 20, 20));
shapes.add(new Ellipse2D.Double(70, 100, 20, 20));
shapes.add(new Ellipse2D.Double(70, 160, 20, 20));
shapes.add(new Ellipse2D.Double(160, 160, 20, 20));
shapes.add(new Ellipse2D.Double(250, 160, 20, 20));
}
@Override
protected void paintComponent(Graphics g)
{
super.paintComponent(g);
Graphics2D g2d = (Graphics2D)g.create();
g2d.setColor(Color.BLACK);
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);
shapes.forEach(g2d::fill);
g2d.dispose();
}
private static void createAndShowGUI()
{
JFrame frame = new JFrame("Example");
JPanel panel = new JPanel();
Object[][] data = {{"1_1", "1_2", "1_3"},
{"2_1", "2_2", "2_3"}};
Object[] columnNames = {"1", "2", "3"};
JTable jtable = new JTable(data, columnNames);
panel.setLayout(new BorderLayout());
panel.add(new SelfContainedExample(), BorderLayout.CENTER);
panel.add(jtable, BorderLayout.SOUTH);
panel.setOpaque(true);
panel.setVisible(true);
frame.add(panel);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(400,400);
frame.setLocationByPlatform( false );
frame.setLocationRelativeTo( null );
frame.setContentPane( panel );
frame.setVisible( true );
}
}
import java.awt.*;
导入java.awt.geom.*;
导入java.util.*;
导入java.util.List;
导入javax.swing.*;
公共类SelfContainedExample扩展了JPanel{
私有列表形状=新的ArrayList();
公共静态void main(字符串[]args)
{
invokeLater(()->createAndShowGUI());
}
公共SelfContainedExample()
{
//无线电圈
添加(新的椭圆2d.Double(250,100,20,20));
添加(新的椭圆2d.Double(160100,20,20));
添加(新的椭圆2d.Double(70,100,20,20));
添加(新的椭圆2d.Double(70,160,20,20));
添加(新的椭圆2d.Double(160,160,20,20));
添加(新的椭圆2d.Double(250,160,20,20));
}
@凌驾
受保护组件(图形g)
{
超级组件(g);
Graphics2D g2d=(Graphics2D)g.create();
g2d.setColor(Color.BLACK);
g2d.setRenderingHint(RenderingHints.KEY_抗锯齿,
RenderingHints.VALUE_ANTIALIAS_ON);
forEach(g2d::fill);
g2d.dispose();
}
私有静态void createAndShowGUI()
{
JFrame=新JFrame(“示例”);
JPanel面板=新的JPanel();
对象[][]数据={{“1_1”、“1_2”、“1_3”},
{"2_1", "2_2", "2_3"}};
对象[]columnNames={“1”、“2”、“3”};
JTable JTable=新的JTable(数据、列名);
panel.setLayout(新的BorderLayout());
panel.add(新的SelfContainedExample(),BorderLayout.CENTER);
面板。添加(jtable,BorderLayout.SOUTH);
panel.set不透明(true);
面板设置可见(真);
框架。添加(面板);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
框架。设置尺寸(400400);
frame.setLocationByPlatform(假);
frame.setLocationRelativeTo(空);
frame.setContentPane(面板);
frame.setVisible(true);
}
}
也许你可以先创建一个HashMap
,其中键是椭圆,值是点,点代表表中椭圆的行/列
//shapes.add(new Ellipse2D.Double(250, 100, 20, 20));
Ellipse2D.Double ellipse = new Ellipse2D.Double(...);
shapes.add(ellipse);
shapesMap.put(ellipse, new Point(0, 0);
用户单击一个省略号2d,然后它将突出显示JTable上的一个单元格并接受输入
因此,您需要向面板中添加一个MouseListener并处理mousePressed()事件。代码需要遍历列表以找到包含该点的椭圆。然后可以开始编辑单元格。可能是这样的:
public void mousePressed(MouseEvent e)
{
for (Ellipse2D.Double ellipse: shapes)
{
if (ellipse.contains(e.getPoint())
{
table.requestFocusInWindow();
Point p = shapesMap.get(ellipse);
table.editCellAt(p.x, p.y);
break;
}
}
}