嗨,我正在做一个项目。我想从database.I在JTable中显示我的数据创建了JSplitpane。在面板1中创建了搜索按钮,jLabel和JTextBox以获取来自Databse的宗派数据...在面板2中,我想在JTable.my数据库查询中显示搜索结果,并且一切正常。.但是我无法在panel2中显示JTable。任何人都可以帮助我解决问题。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; } 最佳答案 但是我无法在panel2中显示JTable ...任何人都可以帮助我解决 问题。您的代码不是SSCCE格式...无法在简单的复制和粘贴上编译,并且存在错误,因为在给定代码的方法范围内未声明table2,也没有对,但我想您是说panel2 ...解:1)不要使用panel1 / null Absolute。阅读以下内容:Laying Out Components Within a ContainerA Visual Guide to Layout Managers2)为什么需要将LayoutManager添加到JTable(或在问题panel1中引用)?如果有什么需要,我们可以将以panel2作为其视口的JScrollPane添加到JTable只需将panel1添加到table2并将JScrollPane添加到JScrollPane,即:JScrollPane pane = new JScrollPane(table2);JSplitPane splitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, panel, pane);或者,将JSplitPane添加到JTable,然后将JScrollPane添加到JScrollPane和panel1中,这样BorderLayout将扩展到容器大小:JPanel panel1=new JPanel(new BorderLayout());....JScrollPane pane = new JScrollPane(table2);panel1.add(pane);JSplitPane splitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, panel, panel1);3)另外,因为我看到您通过以下方式最大化JPanel:JFrame明智的做法是,使用JFrame#setExtendedState(JFrame.MAXIMIZED_BOTH);在更改JFrame大小时自动调整组件的大小。即LayoutManager,BorderLayout和GridLayout是我想到的一些。4)在添加所有组件之前,也不要将GridBagLayout设置为可见。5)通过JFrame块在Event Dispatch Thread上创建Swing组件。6)不要忘记在SwingUtilities.invokeLater(Runnable r)上调用pack()并将其设置为可见,但在添加组件之后。7)我也发现此评论很可疑:JFrame请阅读The Use of Multiple JFrames, Good/Bad Practice?。而是使用//Creating 1st JFrame或CardLayout。8)我看不到完全扩展的JDialog对setLocation的需求。这是带有修复程序的代码(我只使用了所有组件的默认JFrame(除了LayoutManager使用panel1,因此BorderLayout会扩展到容器大小)):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 }}