Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/400.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将Ellipse2D与JTable单元关联_Java_Swing - Fatal编程技术网

Java 将Ellipse2D与JTable单元关联

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.

目前,我已经编写了一些代码,当用户单击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.*;

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。您可以使用映射将表格单元格与椭圆相关联,或者更好地使用选定的表格行和列索引

出于好奇,你在这个网站上问过多少次这个问题?@hovercraftfullofels这是第一次,不过我问过其他几个相关的问题。我还在学习。我担心的是,你的代码没有显示你试图解决这个问题。将来,你会想给我们看这个,否则你可能无法充分锻炼你的大脑,我们也不知道你可能做错了什么。谢谢,我不知道细胞选择event@feltersnach:只需使用鼠标听器就足够了。只需确保选择了实际的行和列。