简体   繁体   English

如何在JSplitPane中添加JTable?

[英]How can add JTable in JSplitPane?

Hii i am doing a project in swing . 我正在做一个摇摆的项目。 i want to display my data in JTable from database.I 我想从数据库中显示我在JTable中的数据.I
created JSplitpane. 创造了JSplitpane。 In panel 1 created search button,jLabel and JTextBox for sect data from Databse...in Panel 2 i want to show search result in JTable.my database query and all working well..But i couldn't display JTable in panel2...anyone can help me to solve the issue. 在面板1中创建了搜索按钮,jLabel和JTextBox用于来自Databse的sect数据...在面板2中我想在JTable.my数据库查询中显示搜索结果并且一切运行良好..但是我无法在panel2中显示JTable ..任何人都可以帮我解决这个问题。

public JFrame TimesheetReport(){ //Creating 1st JFrame public JFrame TimesheetReport(){//创建第一个JFrame

    final JFrame employeeFrame = new JFrame("Report");



    employeeFrame.setExtendedState(Frame.MAXIMIZED_BOTH);
        employeeFrame.setResizable(true)
    employeeFrame.setLocation(100,50);
    employeeFrame.setVisible(true);
            employeeFrame.setResizable(false);
    panel.setLayout(new FlowLayout());
    panel1.setLayout(new BorderLayout());
     employeeFrame.pack();
            final JLabel label1;
    final JLabel label2;
    final JTextField  text1;
    final JTextField text2;
    final JButton ADD;


    {

    label1 = new JLabel("From Date");
    text1 = new JTextField(12);

    label2 = new JLabel("End Date");
    text2 = new JTextField(12);
    JButton button2 = new JButton("calendar");

        ADD=new JButton("Search");
    ADD.setText("Search");
    ADD.addActionListener(new java.awt.event.ActionListener() {  

        @Override
        public void actionPerformed(java.awt.event.ActionEvent e) { 

                DbUtility TimesheetReport=new DbUtility();
                TimesheetReport. loadDriver();
                TimesheetReport.connect();

                String value=(text1.getText());
                String value2=(text2.getText());
                ResultSet rs=     TimesheetReport.executeSelectQuery14(value,value2);
                String    Activityid =null, EmployeeName = null,StartDate = null,EndDate=null,Activity=null,Project=null,Day1=null,Day2=null,Day3=null,Day4=null,Day5=null ;

            try {
            while (rs.next()) {
                Activityid  = rs.getString("Activityid");
                EmployeeName = rs.getString("EmployeeName");
                StartDate = rs.getString("StartDate");
                EndDate = rs.getString("EndDate");
                Activity = rs.getString("Activity");
                Project= rs.getString("Project");
                Day1 = rs.getString("Day1");
                Day2 = rs.getString("Day2");
                Day3 = rs.getString("Day3");
                Day4 = rs.getString("Day4");
                Day5 = rs.getString("Day5");

                String[] columnNames = {"Activityid","EmployeeName", "StatrDate","EndDate", "Activity","Project","Day1","Day2","Day3","Day3","Day4","Day5"};
                String data[][] = {{Activityid,EmployeeName, StartDate,EndDate,Activity,Project,Day1,Day2,Day3,Day4,Day5}};
                System.out.println(Activityid+" "+EmployeeName+" "+StartDate+"" +EndDate+""+Activity+" "+Project+""+Day1+""+Day2+""+Day3+""+Day4+""+Day5);
                final DefaultTableModel model = new DefaultTableModel(data, columnNames);
                table2= new JTable(model);
                table2.setRowHeight( 70 );
                table2.setFillsViewportHeight(true);
                JTextField field = new JTextField();
                field.setForeground(Color.RED);
                field.setBackground(Color.RED);
                table2.getTableHeader().setPreferredSize(new Dimension(50,50));
                table2.getTableHeader().setBackground(Color.blue);
                table2.getTableHeader().setForeground(Color.white);
                table2.getTableHeader().setFont(new Font("Serif", Font.BOLD, 15)); 
                table2.getTableHeader().setOpaque(true);
                table2.getModel();
                table2.setForeground(Color.blue);
                table2.setBackground(Color.white);
                table2.setGridColor(Color.MAGENTA);
                table2.setShowGrid(true);
                    JScrollPane pane = new JScrollPane(table2);
                    panel1.add(pane);




        }
            } catch (SQLException e1) {

                e1.printStackTrace();
                                }  

                 }
                     });


        JSplitPane splitPane = new      JSplitPane(JSplitPane.HORIZONTAL_SPLIT,panel,panel1 );
        splitPane.setDividerLocation(300);
        Dimension minimumSize = new Dimension(250, 0);
        panel.setMinimumSize(minimumSize);
        employeeFrame.add(splitPane);
         pane.add(panel1);
         panel.add(label1);

         label1.setForeground(Color.white);
         panel.add(text1);

         panel.add(label2);

         label2.setForeground(Color.white);
         panel.add( text2);

         panel.add(ADD);

          }



      return employeeFrame;

       }

But i couldn't display JTable in panel2...anyone can help me to solve the issue. 但我无法在panel2中显示JTable ......任何人都可以帮我解决问题。

Your code is not in SSCCE format... It does not compile on a simple copy and paste and at that there is an error as table2 is not declared within the methods scope of given code also there isnt any reference to panel2 but I think you meant panel1 ... 你的代码不是SSCCE格式...它不能在简单的复制和粘贴上编译,并且由于table2未在给定代码的方法范围内声明,因此没有任何对panel2引用,但我认为你意思是panel1 ......

Solution: 解:

1) Dont use null / Absolute LayoutManager . 1)不要使用null / Absolute LayoutManager

Have a read on: 请阅读:

2) Why do you need to add JTable to panel1 (or as quoted in the question panel2 )? 2)为什么需要将JTable添加到panel1 (或在问题panel2引用)? If anything we would add the JScrollPane which has the JTable as its viewport to panel1 Simply add table2 to JScrollPane and add JScrollPane to JSplitPane ie: 如果有的话,我们将添加JScrollPane它具有JTable作为其视口 panel1只需添加table2JScrollPane ,并添加JScrollPaneJSplitPane ,即:

JScrollPane pane = new JScrollPane(table2);
JSplitPane splitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, panel, pane);

Alternatively add JTable to JScrollPane and than add JScrollPane to panel1 with BorderLayout so JPanel will stretch to container size: 或者将JTable添加到JScrollPanepanel1使用BorderLayoutJScrollPane添加到panel1 ,以便JPanel扩展到容器大小:

JPanel panel1=new JPanel(new BorderLayout());
....
JScrollPane pane = new JScrollPane(table2);
panel1.add(pane);
JSplitPane splitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, panel, panel1);

3) Also because I see you maximize the JFrame via: 3)另外因为我看到你通过以下方式最大化JFrame

JFrame#setExtendedState(JFrame.MAXIMIZED_BOTH);

it would be wise to use a LayoutManager which auto resizes components when the JFrame size is changed. 使用LayoutManager是明智的,它可以在更改JFrame大小时自动调整组件大小。 ie BorderLayout , GridLayout and GridBagLayout are a few that come to mind. BorderLayoutGridLayoutGridBagLayout是我想到的一些。

4) Also dont set the JFrame visible before all components are added. 4)在添加所有组件之前,也不JFrame设置为可见。

5) Create Swing components on Event Dispatch Thread via SwingUtilities.invokeLater(Runnable r) block. 5)通过SwingUtilities.invokeLater(Runnable r)块在Event Dispatch Thread上创建Swing组件。

6) Dont forget to call pack() on JFrame before setting it visible but after adding components. 6)在设置它之前,不要忘记在JFrame上调用pack() ,但是在添加组件之后。

7) Also I find this comment suspicous: //Creating 1st JFrame Have a read on The Use of Multiple JFrames, Good/Bad Practice? 7)我也觉得这个评论很可疑: //Creating 1st JFrame阅读使用多个JFrame,好/坏练习? . Rather use CardLayout or JDialog . 而是使用CardLayoutJDialog

8) I cant see the need for setLocation with a fully extended JFrame . 8)我无法看到需要使用完全扩展的JFrame setLocation

Here is your code with fixes (I just used all components default LayoutManager s (except panel1 which uses BorderLayout so JPanel will stretch to container size): 这是你的代码修复(我只使用了所有组件的默认LayoutManager (除了使用BorderLayout panel1 ,因此JPanel将扩展到容器大小):

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.Frame;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JSplitPane;
import javax.swing.JTable;
import javax.swing.JTextField;

public class Test {

    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                new Test();
            }
        });
    }

    public Test() {
        createAndShowGui();
    }

    public void createAndShowGui() {

        final JFrame employeeFrame = new JFrame("Report");
        employeeFrame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);

        final JPanel panel = new JPanel() {
            @Override
            public Dimension getMinimumSize() {
                return new Dimension(250, 0);
            }
        };
        final JTable table2 = new JTable(new String[][]{
                    {"one", "two", "three"},
                    {"one", "two", "three"},
                    {"one", "two", "three"}
                }, new String[]{"col1", "col2", "col3"});

        JPanel panel1 = new JPanel(new BorderLayout());//panel which holds jtable
        final JLabel label1;
        final JLabel label2;
        final JTextField text1;
        final JTextField text2;
        final JButton ADD;

        label1 = new JLabel("From Date");
        text1 = new JTextField(12);
        label2 = new JLabel("End Date");
        text2 = new JTextField(12);
        JButton button2 = new JButton("calendar");
        ADD = new JButton("Search");
        ADD.setText("Search");
        ADD.addActionListener(new java.awt.event.ActionListener() {
            @Override
            public void actionPerformed(java.awt.event.ActionEvent e) {
                /*
                 DbUtility createAndShowGui = new DbUtility();
                 createAndShowGui.loadDriver();
                 createAndShowGui.connect();

                 String value = (text1.getText());
                 String value2 = (text2.getText());
                 ResultSet rs = createAndShowGui.executeSelectQuery14(value, value2);
                 String Activityid = null, EmployeeName = null, StartDate = null, EndDate = null, Activity = null, Project = null, Day1 = null, Day2 = null, Day3 = null, Day4 = null, Day5 = null;

                 try {
                 while (rs.next()) {
                 Activityid = rs.getString("Activityid");
                 EmployeeName = rs.getString("EmployeeName");
                 StartDate = rs.getString("StartDate");
                 EndDate = rs.getString("EndDate");
                 Activity = rs.getString("Activity");
                 Project = rs.getString("Project");
                 Day1 = rs.getString("Day1");
                 Day2 = rs.getString("Day2");
                 Day3 = rs.getString("Day3");
                 Day4 = rs.getString("Day4");
                 Day5 = rs.getString("Day5");

                 String[] columnNames = {"Activityid", "EmployeeName", "StatrDate", "EndDate", "Activity", "Project", "Day1", "Day2", "Day3", "Day3", "Day4", "Day5"};
                 String data[][] = {{Activityid, EmployeeName, StartDate, EndDate, Activity, Project, Day1, Day2, Day3, Day4, Day5}};
                 System.out.println(Activityid + " " + EmployeeName + " " + StartDate + "" + EndDate + "" + Activity + " " + Project + "" + Day1 + "" + Day2 + "" + Day3 + "" + Day4 + "" + Day5);
                 final DefaultTableModel model = new DefaultTableModel(data, columnNames);
                 table2 = new JTable(model);
                 table2.setRowHeight(70);
                 table2.setFillsViewportHeight(true);
                 JTextField field = new JTextField();
                 field.setForeground(Color.RED);
                 field.setBackground(Color.RED);
                 table2.getTableHeader().setPreferredSize(new Dimension(50, 50));
                 table2.getTableHeader().setBackground(Color.blue);
                 table2.getTableHeader().setForeground(Color.white);
                 table2.getTableHeader().setFont(new Font("Serif", Font.BOLD, 15));
                 table2.getTableHeader().setOpaque(true);
                 table2.getModel();
                 table2.setForeground(Color.blue);
                 table2.setBackground(Color.white);
                 table2.setGridColor(Color.MAGENTA);
                 table2.setShowGrid(true);

                 }
                 } catch (SQLException e1) {
                 e1.printStackTrace();
                 }
                 */
            }
        });

        panel.add(label1);
        label1.setForeground(Color.white);
        panel.add(text1);
        panel.add(label2);
        label2.setForeground(Color.white);
        panel.add(text2);
        panel.add(ADD);

        JScrollPane pane = new JScrollPane(table2);
        panel1.add(pane);
        JSplitPane splitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, panel, panel1);
        splitPane.setDividerLocation(300);

        employeeFrame.add(splitPane);

        employeeFrame.setExtendedState(Frame.MAXIMIZED_BOTH);
        //employeeFrame.setLocation(100, 50);
        employeeFrame.pack();

        employeeFrame.setVisible(true);
        employeeFrame.setResizable(false);//or else it wont work nicely withn JFrame#setExtendedState
    }
}

通过查看您的代码,我找不到您将Table放置在Panel实际上在SplitPane中添加的面板或窗格的位置。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM