Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/384.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 将JTable值保存到数组_Java_Arrays_Swing_Jtable - Fatal编程技术网

Java 将JTable值保存到数组

Java 将JTable值保存到数组,java,arrays,swing,jtable,Java,Arrays,Swing,Jtable,我在下面写了一个独立的例子,除了一件事之外,它的工作方式和我想要的差不多。目前,如果用户单击一个Ellipse2D,它将高亮显示JTable中的一个单元格,并允许他们输入字符串。问题是,当您关闭程序时,它不会将值保存到对象[]数据 如何将输入保存到Object[][]数据,以便下次运行应用程序时它会出现 import java.awt.*; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import

我在下面写了一个独立的例子,除了一件事之外,它的工作方式和我想要的差不多。目前,如果用户单击一个Ellipse2D,它将高亮显示JTable中的一个单元格,并允许他们输入字符串。问题是,当您关闭程序时,它不会将值保存到对象[]数据

如何将输入保存到Object[][]数据,以便下次运行应用程序时它会出现

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++;
        }
    }

    @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);

        for (Ellipse2D ellipse : ellipses) {
            g2d.fill(ellipse);
        }

        g2d.setStroke(new BasicStroke(3));
        g2d.setColor(Color.GRAY);
        for (Ellipse2D ellipse : ellipses) {
            g2d.draw(ellipse);
        }

        addMouseListener(this);
        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);
                break;
            }
        }
    }

    @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.双椭圆:椭圆){
形状映射放置(椭圆,新点(行,列));
行++;
}
}
@凌驾
受保护组件(图形g)
{
超级组件(g);
Graphics2D g2d=(Graphics2D)g.create();
g2d.setColor(Color.BLACK);
g2d.setRenderingHint(RenderingHints.KEY_抗锯齿,
RenderingHints.VALUE_ANTIALIAS_ON);
对于(椭圆E2D椭圆:椭圆){
g2d.填充(椭圆);
}
g2d.设定行程(新基本行程(3));
g2d.setColor(Color.GRAY);
对于(椭圆E2D椭圆:椭圆){
g2d.绘制(椭圆);
}
addMouseListener(这个);
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);
打破
}
}
}
@凌驾
公共无效MouseEvent e{}
@凌驾
公共无效mouseenterned(MouseEvent e){}
@凌驾
公共无效mouseExited(MouseEvent e){}
}

这与JTables或Swing无关,而与数据的Java持久性有关,仅此而已。查看此内容,您将发现大量可能的解决方案,包括序列化、写入文件、数据库…@hovercraftfullofels谢谢。注意,我发现您的代码中存在一个大问题,您似乎在paintComponent方法中添加了鼠标侦听器--千万不要这样做,除非您希望GUI有很多鼠标侦听器,许多鼠标侦听器无法控制地添加。我脑海中唯一与Swing相关的问题将围绕事件——什么事件应该触发正在保存的数据?保存按钮ActionListener?关窗事件?程序运行时间歇保存数据的计时器?另一个与Swing相关的问题是注意所有文件I/O都要在Swing事件线程的线程背景上完成。@HovercraftFullOfEels实际上我喜欢计时器间歇保存数据的想法。这是我将采取的办法。