2013-02-15 5 views
1

Hii Я делаю проект в качелях. Я хочу отображать свои данные в JTable из базы данных. I
создал JSplitpane. В панели 1 создана кнопка поиска, jLabel и JTextBox для данных секций из Databse ... в Panel 2 я хочу показать результат поиска в запросе базы данных JTable.my и все хорошо работает .. Но я не смог отобразить JTable в панели2. . Кто-то может помочь мне решить проблему.Как добавить JTable в JSplitPane?

общественного JFrame TimesheetReport() {// Создание 1-ый 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; 

     } 

ответ

3

Но я не смог показать JTable в panel2 ... кто может помочь мне решить вопрос.

Ваш код не в формате SSCCE ... Это не компилируется на простое копирование и вставок, а в том, что есть ошибка в table2 не объявлен в методах рамки данного кода также там не все ссылки к panel2, но я думаю, что вы имели в виду panel1 ...

Решение:

1) Не используйте null/AbsoluteLayoutManager.

ли прочитанный на:

2) Почему вам нужно добавить JTable к panel1 (или как указано в вопросе panel2) ? Если что-то мы бы добавить JScrollPane, который имеет JTable в качестве видовом к panel1 Просто добавьте table2 в JScrollPane и добавить JScrollPane к JSplitPane т.е.

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

В качестве альтернативы добавить JTable в JScrollPane и чем добавить JScrollPane к panel1 с BorderLayout так что 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) Кроме того, потому что я вижу, что вы максимально JFrame через:

JFrame#setExtendedState(JFrame.MAXIMIZED_BOTH);

было бы целесообразно использовать LayoutManager, которая автоматически изменяет размеры компонентов, когда размер JFrame изменяется. iee BorderLayout, GridLayout и GridBagLayout - это несколько, которые приходят на ум.

4) Также не устанавливайте JFrame, прежде чем все компоненты будут добавлены.

5) Создайте компоненты Swing на Event Dispatch Thread через SwingUtilities.invokeLater(Runnable r) блок.

6) Не забудьте позвонить pack() по телефону JFrame, прежде чем устанавливать его, но после добавления компонентов.

7) Также я нахожу этот комментарий подозрительным: //Creating 1st JFrame Прочитать на The Use of Multiple JFrames, Good/Bad Practice?. Скорее используйте CardLayout или JDialog.

8) Я не вижу необходимости в setLocation с полностью выдвинутым JFrame.

Вот ваш код с исправлениями (я использовал все компоненты по умолчанию LayoutManager S (за исключением panel1, который использует BorderLayout так 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 
    } 
} 
+0

Сэр я пробовал разную компоновку before.but таблица не отображается. – learner

+0

@radhu хорошо, как вы можете видеть, есть много другие пункты, которые я перечислил, все из которых c причиной многих проблем. Но верьте мне, нулевой макет - самый большой. –

+0

ok sir..let me try changes .. – learner

0

Глядя на ваш код, я не могу найдите место, где вы размещаете таблицу в панели или панели, которую вы на самом деле добавляете в SplitPane.

+0

См. Здесь 'JScrollPane pane = new JScrollPane (table2); JSplitPane splitPane = новый JSplitPane (JSplitPane.HORIZONTAL_SPLIT, панель, панель); ' –

Смежные вопросы