首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Ellipse2D与JTable细胞的关联

Ellipse2D与JTable细胞的关联
EN

Stack Overflow用户
提问于 2015-11-15 18:21:17
回答 1查看 31关注 0票数 0

目前,我已经编写了一些代码,在用户单击JTable时选择Ellipse2D中的单元格。如果用户单击.fill中的相关单元格,我也希望Ellipse2D。使用下面的代码,我将如何做到这一点?

代码语言:javascript
复制
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) {}
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-11-15 18:33:01

建议:

  • 创建一个Ellipse2D变量selectedEllipse,将==设置为null。
  • 在您的paintComponent中,如果selectedEllipse不是null,则填充它。
  • 侦听选择事件的JTable,这可能在您的MouseListener中得到选定的行和列,然后使用这些信息设置selectedEllipse。您可以使用Map将表单元格与椭圆关联,或者更好地使用选定的表行和列索引。
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33723261

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档