java - 为什么我不能在 JFrame 上画线

标签 java swing graphics line graphics2d

如下面的代码所示,我从数据库中获取行的 x 和 y 值。然后将它们存储在数组 x 中。之后我试图在框架上画这条线,但它没有被画出来。如何在 Frame 上画线?

public class TestFrame{
    static JFrame test;
    public static void main(String ar[]){
        test=new JFrame("Test");
        JButton openLine=new JButton(new AbstractAction("Open Line"){

            public void actionPerformed(ActionEvent e) {
                String lineId=JOptionPane.showInputDialog("Enter Line id");
                ImageComponent image=new ImageComponent();
                image.openLine(lineId);
            }

        });
        test.add(openLine, BorderLayout.NORTH);
        test.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        test.setSize(600,600);
        test.setVisible(true);

    }
    static class ImageComponent extends JComponent{
        static int[] x=new int[100];
        static ArrayList al=new ArrayList();
        public void openLine(String line_id){

                            try {

                                Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
                                Connection con=DriverManager.getConnection("jdbc:odbc:image");
                                Statement pstm=con.createStatement();
                                ResultSet rs=pstm.executeQuery("select * from Line where ID= '"+line_id+"'");
                                while(rs.next()){
                                    x[0]=rs.getInt(3);
                                    x[1]=rs.getInt(4);
                                    x[2]=rs.getInt(5);
                                    x[3]=rs.getInt(6);

                                    al.add(x);

                                }

                                repaint();

                            } catch (Exception ex) {
                                System.out.println("Exception : "+ex);
                            }
                }
                public Graphics2D gd;
                Line2D[] line=new Line2D[100];
        protected void paintComponent(Graphics g) {
            super.paintComponent(g);
                        gd=(Graphics2D)g;

                        gd.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);

                            for(int i=0;i<al.size();i++){
                                line[i]=new Line2D.Double(x[0], x[1],x[2],x[3]);
                                gd.draw(line[i]);

                            }

                        }
                }
}

最佳答案

这是一种使用 BufferedImage as a rendering surface 的方法.

该问题中的 OP 询问有关小程序的信息,但我在选项 Pane 中显示了图像。它同样适合在框架等中显示,而不会混淆是覆盖 paint(Graphics) 还是 paintComponent(Graphics)。 ;)

关于java - 为什么我不能在 JFrame 上画线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10172412/

相关文章:

java - 如何从 JNA 中的内存/指针对象读取结构?

java - 项目不会在 JPanel 中移动

opengl - glGenVertexArrays 没有给出独特的 vaos

c++ - 如何强制 Mac 窗口到前台?

c++ - OpenGL,为什么这不是立方体?

java - equals方法的问题

java - 用于通用应用程序消息传递的 snmp 陷阱 OID 是什么?

Java 输入流到 Python (PY4J)

java - 修改文件名时文件保存失败

java - 将 JList 分为 2 组的优化方法