Java 将Ellipse2D与JTable单元关联
目前,我已经编写了一些代码,当用户单击Ellipse2D时,可以在JTable中选择一个单元格。如果用户单击JTable中的相关单元格,我还想填充省略号2d。使用下面的代码,我将如何执行此操作Java 将Ellipse2D与JTable单元关联,java,swing,Java,Swing,目前,我已经编写了一些代码,当用户单击Ellipse2D时,可以在JTable中选择一个单元格。如果用户单击JTable中的相关单元格,我还想填充省略号2d。使用下面的代码,我将如何执行此操作 import java.awt.*; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.awt.geom.*; import java.util.*; import javax.swing.
import java.awt.*;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.geom.*;
import java.util.*;
import javax.swing.*;
public class SelfContainedExample extends JPanel implements MouseListener {
private Map<Ellipse2D.Double, Point> shapesMap = new HashMap<>();
private Ellipse2D.Double[] ellipses = new Ellipse2D.Double[] {
new Ellipse2D.Double(50, 100, 30, 30),
new Ellipse2D.Double(175, 100, 30, 30),
new Ellipse2D.Double(300, 100, 30, 30),
new Ellipse2D.Double(50, 160, 30, 30),
new Ellipse2D.Double(175, 160, 30, 30),
new Ellipse2D.Double(300, 160, 30, 30)};
static Object[][] data = {{"1_1", "1_2", "1_3"},
{"2_1", "2_2", "2_3"},
{"3_1", "2_2", "2_3"},
{"4_1", "2_2", "2_3"},
{"5_1", "2_2", "2_3"},
{"6_1", "2_2", "2_3"}};
static Object[] columnNames = {"1", "2", "3"};
static JTable jtable = new JTable(data, columnNames);
public static void main(String[] args)
{
EventQueue.invokeLater(() -> createAndShowGUI());
}
public SelfContainedExample() {
int row = 0;
int column = 0;
for (Ellipse2D.Double ellipse : ellipses) {
shapesMap.put(ellipse, new Point(row, column));
row++;
}
addMouseListener(this);
}
@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);
g2d.setStroke(new BasicStroke(3));
g2d.setColor(Color.GRAY);
for (Ellipse2D ellipse : ellipses) {
g2d.draw(ellipse);
}
g2d.dispose();
}
private static void createAndShowGUI()
{
JFrame frame = new JFrame("Example");
JPanel panel = new JPanel();
JPanel tablePanel = new JPanel();
JScrollPane jScrollPane = new JScrollPane(jtable);
jScrollPane.setPreferredSize(new Dimension(385, 119));
tablePanel.add(jScrollPane);
tablePanel.setSize(200, 200);
panel.setLayout(new BorderLayout());
panel.add(new SelfContainedExample(), BorderLayout.CENTER);
panel.add(tablePanel, 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);
}
@Override
public void mouseClicked(MouseEvent e) {}
public void mousePressed(MouseEvent e) {
for (Ellipse2D.Double ellipse : ellipses) {
if (ellipse.contains(e.getPoint())) {
jtable.requestFocusInWindow();
Point p = shapesMap.get(ellipse);
jtable.editCellAt(p.x, p.y);
}
if (jtable.contains(e.getPoint())) {
}
}
}
@Override
public void mouseReleased(MouseEvent e) {}
@Override
public void mouseEntered(MouseEvent e) {}
@Override
public void mouseExited(MouseEvent e) {}
}
import java.awt.*;
导入java.awt.event.MouseEvent;
导入java.awt.event.MouseListener;
导入java.awt.geom.*;
导入java.util.*;
导入javax.swing.*;
公共类SelfContainedExample扩展JPanel实现MouseListener{
私有映射shapemap=newhashmap();
私有Ellipse2D.Double[]椭圆=新的Ellipse2D.Double[]{
新的Ellipse2D.双(50100,30,30),
新的Ellipse2D.双色(175100,30,30),
新的Ellipse2D双色(3001003030),
新的Ellipse2D.双(50,160,30,30),
新的Ellipse2D.双(175、160、30、30),
新的Ellipse2D.Double(300,160,30,30)};
静态对象[][]数据={{“1_1”、“1_2”、“1_3”},
{"2_1", "2_2", "2_3"},
{"3_1", "2_2", "2_3"},
{"4_1", "2_2", "2_3"},
{"5_1", "2_2", "2_3"},
{"6_1", "2_2", "2_3"}};
静态对象[]columnNames={“1”、“2”、“3”};
静态JTable JTable=新的JTable(数据、列名);
公共静态void main(字符串[]args)
{
invokeLater(()->createAndShowGUI());
}
公共SelfContainedExample(){
int行=0;
int列=0;
for(椭圆2d.双椭圆:椭圆){
形状映射放置(椭圆,新点(行,列));
行++;
}
addMouseListener(这个);
}
@凌驾
受保护组件(图形g)
{
超级组件(g);
Graphics2D g2d=(Graphics2D)g.create();
g2d.setColor(Color.BLACK);
g2d.setRenderingHint(RenderingHints.KEY_抗锯齿,
RenderingHints.VALUE_ANTIALIAS_ON);
g2d.设定行程(新基本行程(3));
g2d.setColor(Color.GRAY);
对于(椭圆E2D椭圆:椭圆){
g2d.绘制(椭圆);
}
g2d.dispose();
}
私有静态void createAndShowGUI()
{
JFrame=新JFrame(“示例”);
JPanel面板=新的JPanel();
JPanel tablePanel=新的JPanel();
JScrollPane JScrollPane=新的JScrollPane(jtable);
setPreferredSize(新维度(385119));
tablePanel.add(jScrollPane);
桌面面板。设置尺寸(200200);
panel.setLayout(新的BorderLayout());
panel.add(新的SelfContainedExample(),BorderLayout.CENTER);
panel.add(tablePanel,BorderLayout.SOUTH);
panel.set不透明(true);
面板设置可见(真);
框架。添加(面板);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
框架。设置尺寸(400400);
frame.setLocationByPlatform(假);
frame.setLocationRelativeTo(空);
frame.setContentPane(面板);
frame.setVisible(true);
}
@凌驾
公共无效mouseClicked(MouseEvent e){}
公共无效鼠标按下(MouseEvent e){
for(椭圆2d.双椭圆:椭圆){
if(eliple.contains(e.getPoint())){
jtable.requestFocusInWindow();
点p=形状映射获取(椭圆);
jtable.editCellAt(p.x,p.y);
}
if(jtable.contains(e.getPoint())){
}
}
}
@凌驾
公共无效MouseEvent e{}
@凌驾
公共无效mouseenterned(MouseEvent e){}
@凌驾
公共无效mouseExited(MouseEvent e){}
}
建议:
- 创建一个Ellipse2D变量,选择delipse,将==设置为null
- 在paintComponent中,如果selectedEllipse不为null,则填充它
- 收听JTable for selection events(选择事件),这可能在您的鼠标侦听器中,从中获取选定的行和列,然后使用此信息设置selectedEllipse。您可以使用映射将表格单元格与椭圆相关联,或者更好地使用选定的表格行和列索引