Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/370.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
从另一个函数访问jframe并将jpanel添加到其中-JavaSwing_Java_Swing_Jframe_Jpanel - Fatal编程技术网

从另一个函数访问jframe并将jpanel添加到其中-JavaSwing

从另一个函数访问jframe并将jpanel添加到其中-JavaSwing,java,swing,jframe,jpanel,Java,Swing,Jframe,Jpanel,我试图实现一个特定的GUI,但是我没有将JPanel插入到我的jframe中,jframe是在另一个函数中初始化的,你知道怎么做吗 这是我的密码: public class CDRTable { int totalRecords; private final String[] columnNames = { "Year", "String", "Comment" }; private final DefaultTableModel model = new DefaultT

我试图实现一个特定的GUI,但是我没有将JPanel插入到我的jframe中,jframe是在另一个函数中初始化的,你知道怎么做吗

这是我的密码:

public class CDRTable {
    int totalRecords;
    private final String[] columnNames = { "Year", "String", "Comment" };
    private final DefaultTableModel model = new DefaultTableModel(null, columnNames) {
        @Override
        public Class<?> getColumnClass(int column) {
            return (column == 0) ? Integer.class : Object.class;
        }
    };
    private final TableRowSorter<TableModel> sorter = new TableRowSorter<TableModel>(model);
    private final JTable table = new JTable(model);
    private final JButton first = new JButton(new AbstractAction("|<") {
        public void actionPerformed(ActionEvent e) {
            currentPageIndex = 1;
            initFilterAndButton();
        }
    });
    private final JButton prev = new JButton(new AbstractAction("<") {
        public void actionPerformed(ActionEvent e) {
            currentPageIndex -= 1;
            initFilterAndButton();
        }
    });
    private final JButton next = new JButton(new AbstractAction(">") {
        public void actionPerformed(ActionEvent e) {
            currentPageIndex += 1;
            initFilterAndButton();
        }
    });
    private final JButton last = new JButton(new AbstractAction(">|") {
        public void actionPerformed(ActionEvent e) {
            currentPageIndex = maxPageIndex;
            initFilterAndButton();
        }
    });
    private final JTextField field = new JTextField(2);
    private final JLabel label = new JLabel();

    public JComponent makeUI() throws ClassNotFoundException, SQLException {

        table.setFillsViewportHeight(true);
        table.setRowSorter(sorter);

        Class.forName("org.h2.Driver");
        Connection conn = DriverManager.getConnection("jdbc:h2:file:G:/hs_data/h2_db/test", "sa", "sa");

        Statement stmt = conn.createStatement();
        ResultSet rs = stmt.executeQuery("SELECT * FROM cdr LIMIT 1000");

        totalRecords = 1000;
        for (int i = 0; i < totalRecords; i++) {
            model.addRow(new Object[] { 0,0,0 });
        }
        table.setModel(DbUtils.resultSetToTableModel(rs));

        JPanel po = new JPanel();
        po.add(field);
        po.add(label);
        JPanel box = new JPanel(new GridLayout(1, 4, 2, 2));
        for (JComponent r : Arrays.asList(first, prev, po, next, last)) {
            box.add(r);
        }

        int rowCount = model.getRowCount();
        int v = rowCount % itemsPerPage == 0 ? 0 : 1;
        maxPageIndex = rowCount / itemsPerPage + v;
        initFilterAndButton();
        label.setText(String.format("/ %d", maxPageIndex));
        KeyStroke enter = KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, 0);
        field.getInputMap(JComponent.WHEN_FOCUSED).put(enter, "Enter");
        field.getActionMap().put("Enter", new AbstractAction() {
            public void actionPerformed(ActionEvent e) {
                try {
                    int v = Integer.parseInt(field.getText());
                    if (v > 0 && v <= maxPageIndex) {
                        currentPageIndex = v;
                    }
                } catch (Exception ex) {
                    ex.printStackTrace();
                }
                initFilterAndButton();
            }
        });

        JPanel p = new JPanel(new BorderLayout());
        p.add(box, BorderLayout.NORTH);
        p.add(new JScrollPane(table));
        return p;
    }

    private final int itemsPerPage = 100;
    private int maxPageIndex;
    private int currentPageIndex = 1;

    private void initFilterAndButton() {
        sorter.setRowFilter(new RowFilter<TableModel, Integer>() {
            @Override
            public boolean include(Entry<? extends TableModel, ? extends Integer> entry) {
                int ti = currentPageIndex - 1;
                int ei = entry.getIdentifier();
                return ti * itemsPerPage <= ei && ei < ti * itemsPerPage + itemsPerPage;
            }
        });
        first.setEnabled(currentPageIndex > 1);
        prev.setEnabled(currentPageIndex > 1);
        next.setEnabled(currentPageIndex < maxPageIndex);
        last.setEnabled(currentPageIndex < maxPageIndex);
        field.setText(Integer.toString(currentPageIndex));
    }

    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    CDRTable obj = new CDRTable();
                    obj.createAndShowGUI();
                } catch (ClassNotFoundException e) {
                    e.printStackTrace();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
        });
    }

    public void createAndShowGUI() throws ClassNotFoundException, SQLException {
        JFrame f = new JFrame();
        f.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        f.getContentPane().add(new CDRTable().makeUI());
        f.setBounds(30, 50, 1300, 600);
        f.setLocationRelativeTo(null);
        f.setVisible(true);
    }


}
公共类CDR表{
国际总记录;
私有最终字符串[]columnNames={“年”、“字符串”、“注释”};
private final DefaultTableModel=new DefaultTableModel(null,columnNames){
@凌驾
公共类getColumnClass(int列){
返回(列==0)?Integer.class:Object.class;
}
};
专用最终表格行分拣机=新表格行分拣机(型号);
专用最终JTable表=新JTable(模型);
private final JButton first=new JButton(new AbstractAction(“| |”){
已执行的公共无效操作(操作事件e){
currentPageIndex=maxPageIndex;
initFilterAndButton();
}
});
私有最终JTextField=新JTextField(2);
专用最终JLabel标签=新JLabel();
公共JComponent makeUI()抛出ClassNotFoundException、SQLException{
表.setFillsViewPerthweight(真);
表.SetRow分拣机(分拣机);
Class.forName(“org.h2.Driver”);
Connection conn=DriverManager.getConnection(“jdbc:h2:file:G:/hs_data/h2_db/test”、“sa”、“sa”);
语句stmt=conn.createStatement();
ResultSet rs=stmt.executeQuery(“从cdr LIMIT 1000中选择*);
totalRecords=1000;
对于(int i=0;i如果(v>0&&v不知何故,我实现了我想要的,所以我想我应该把答案放在这里

public class CDRTable {
    //JFrame f;
    int totalRecords;
    private final String[] columnNames = { "ANUMBER", "BNUMBER", "DATETIME" };
    private final DefaultTableModel model = new DefaultTableModel(null, columnNames) {
        @Override
        public Class<?> getColumnClass(int column) {
            return (column == 0) ? Integer.class : Object.class;
        }
    };
    private final TableRowSorter<TableModel> sorter = new TableRowSorter<TableModel>(model);
    private final JTable table = new JTable(model);
    private final JButton first = new JButton(new AbstractAction("|<") {
        public void actionPerformed(ActionEvent e) {
            currentPageIndex = 1;
            initFilterAndButton();
        }
    });
    private final JButton prev = new JButton(new AbstractAction("<") {
        public void actionPerformed(ActionEvent e) {
            currentPageIndex -= 1;
            initFilterAndButton();
        }
    });
    private final JButton next = new JButton(new AbstractAction(">") {
        public void actionPerformed(ActionEvent e) {
            currentPageIndex += 1;
            initFilterAndButton();
        }
    });
    private final JButton last = new JButton(new AbstractAction(">|") {
        public void actionPerformed(ActionEvent e) {
            currentPageIndex = maxPageIndex;
            initFilterAndButton();
        }
    });
    private final JTextField field = new JTextField(2);
    private final JLabel label = new JLabel();

    public JComponent makeUI(Container f) throws ClassNotFoundException, SQLException {

        table.setFillsViewportHeight(true);
        table.setRowSorter(sorter);

        Class.forName("org.h2.Driver");
        Connection conn = DriverManager.getConnection("jdbc:h2:file:G:/hs_data/h2_db/test", "sa", "sa");

        Statement stmt = conn.createStatement();
        ResultSet rs = stmt.executeQuery("SELECT * FROM cdr LIMIT 1000");

        totalRecords = 1000;
        for (int i = 0; i < totalRecords; i++) {
            model.addRow(new Object[] { 0,0,0 });
        }
        table.setModel(DbUtils.resultSetToTableModel(rs));

        JPanel po = new JPanel();
        po.add(field);
        po.add(label);
        JPanel box = new JPanel(new GridLayout(1, 4, 2, 2));
        for (JComponent r : Arrays.asList(first, prev, po, next, last)) {
            box.add(r);
        }
        int rowCount = model.getRowCount();
        int v = rowCount % itemsPerPage == 0 ? 0 : 1;
        maxPageIndex = rowCount / itemsPerPage + v;
        initFilterAndButton();
        label.setText(String.format("/ %d", maxPageIndex));
        KeyStroke enter = KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, 0);
        field.getInputMap(JComponent.WHEN_FOCUSED).put(enter, "Enter");
        field.getActionMap().put("Enter", new AbstractAction() {
            public void actionPerformed(ActionEvent e) {
                try {
                    int v = Integer.parseInt(field.getText());
                    if (v > 0 && v <= maxPageIndex) {
                        currentPageIndex = v;
                    }
                } catch (Exception ex) {
                    ex.printStackTrace();
                }
                initFilterAndButton();
            }
        });

        UIManager.put("TabbedPane.selected", Color.lightGray);
        JTabbedPane tabbedPane = new JTabbedPane();
        f.add(tabbedPane);

        JPanel panel = new JPanel();
        tabbedPane.addTab("TABLE", null, panel, null);
        panel.setBackground(Color.white);

        JPanel panel_1 = new JPanel();
        tabbedPane.addTab("GRAPH", null, panel_1, null);
        panel_1.setBackground(Color.white);

        JScrollPane scrollpane = new JScrollPane();
        panel.add(scrollpane, BorderLayout.SOUTH);
        scrollpane.setViewportView(table);

        table.getTableHeader().setBackground(new Color(26,82,118));
        table.getTableHeader().setForeground(Color.white);
        table.getTableHeader().setPreferredSize(new Dimension(100, 40));
        table.setRowHeight(30);

        first.setBackground(new Color(84, 153, 199));
        prev.setBackground(new Color(84, 153, 199));
        next.setBackground(new Color(84, 153, 199));
        last.setBackground(new Color(84, 153, 199));

        first.setForeground(Color.white);
        prev.setForeground(Color.white);
        next.setForeground(Color.white);
        last.setForeground(Color.white);

        panel.add(box);
        panel.add(new JScrollPane(table));
        return scrollpane;

    }

    private final int itemsPerPage = 100;
    private int maxPageIndex;
    private int currentPageIndex = 1;

    private void initFilterAndButton() {
        sorter.setRowFilter(new RowFilter<TableModel, Integer>() {
            @Override
            public boolean include(Entry<? extends TableModel, ? extends Integer> entry) {
                int ti = currentPageIndex - 1;
                int ei = entry.getIdentifier();
                return ti * itemsPerPage <= ei && ei < ti * itemsPerPage + itemsPerPage;
            }
        });
        first.setEnabled(currentPageIndex > 1);
        prev.setEnabled(currentPageIndex > 1);
        next.setEnabled(currentPageIndex < maxPageIndex);
        last.setEnabled(currentPageIndex < maxPageIndex);
        field.setText(Integer.toString(currentPageIndex));
    }

    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    CDRTable obj = new CDRTable();
                    obj.createAndShowGUI();
                } catch (ClassNotFoundException e) {
                    e.printStackTrace();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
        });
    }

    public void createAndShowGUI() throws ClassNotFoundException, SQLException {
        JFrame f = new JFrame("CDR TABLE");
        f.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        f.getContentPane().add(new CDRTable().makeUI(f));
        f.setBounds(30, 50, 1300, 600);
        f.setLayout(new GridLayout(0, 2));
        f.setLocationRelativeTo(null);
        f.setVisible(true);
    }


}
公共类CDR表{
//jf框架;
国际总记录;
私有最终字符串[]columnNames={“ANUMBER”、“BNUMBER”、“DATETIME”};
private final DefaultTableModel=new DefaultTableModel(null,columnNames){
@凌驾
公共类getColumnClass(int列){
返回(列==0)?Integer.class:Object.class;
}
};
专用最终表格行分拣机=新表格行分拣机(型号);
专用最终JTable表=新JTable(模型);
private final JButton first=new JButton(new AbstractAction(“| |”){
已执行的公共无效操作(操作事件e){
currentPageIndex=maxPageIndex;
initFilterAndButton();
}
});
私有最终JTextField=新JTextField(2);
专用最终JLabel标签=新JLabel();
公共JComponent makeUI(容器f)抛出ClassNotFoundException、SQLException{
表.setFillsViewPerthweight(真);
表.SetRow分拣机(分拣机);
Class.forName(“org.h2.Driver”);
Connection conn=DriverManager.getConnection(“jdbc:h2:file:G:/hs_data/h2_db/test”、“sa”、“sa”);
语句stmt=conn.createStatement();
ResultSet rs=stmt.executeQuery(“从cdr LIMIT 1000中选择*);
totalRecords=1000;
对于(int i=0;i如果(v>0&&v,我在makeUI中看不到
f
。您可能应该在createAndShowGui()中将
f
设置为字段,而不是局部变量方法。您只在静态createAndShowGUI方法中定义JFrame f。在外部无法访问它!阅读一些有关Java中可见性和面向对象的基础知识我尝试声明和定义
JFrame f=new JFrame(“CDR表”)
在我的主类中,但它迫使我将其设置为静态,这完全改变了整个代码。我不知道该做什么do@Luftbaum我已经更改了代码,请现在检查。我已经创建了main类的对象,然后从该函数调用createAndShowGUI并删除静态,但框架仍然无法从任何其他函数访问A最简单的方法是在声明类的名称并在主方法中实例化后,将jframe声明为公共可访问字段,这样,jframe变量就可以在所有方法中访问