简体   繁体   中英

JTable in JScrollPane

I am adding JTable in a JScrollPane then adding scrollpane to the panel, then adding panel to the frame but it doesn't work here's the code. I want to have scroll bar on table or frame that will make table scrollable so user can see it. I have tried many ways but non worked for me here is the whole code

public class View extends JFrame {

private static final long serialVersionUID = 1L;

/**
 * Launch the application.
 */
//here in the main method i it adds in the JFrame everything

public static void main(String[] args) {
    EventQueue.invokeLater(new Runnable() {
        public void run() {
            try {
                View frame = new View();
                frame.setVisible(true);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    });
}

public void showData() throws SQLException, ParseException {

    panel = new JPanel();
    panel_1 = new JPanel();
    model_1 = new DefaultTableModel();
    model_2 = new DefaultTableModel();

    model_1.addColumn("Title");
    model_1.addColumn("Priority ");
    model_1.addColumn("DeadLine");
    model_1.addColumn("Time");
    model_1.addColumn("Progress");

    model_2.addColumn("Task Title");
    model_2.addColumn("Priority ");
    model_2.addColumn("DeadLine");
    model_2.addColumn("Time");
    model_2.addColumn("Done");

    Database obj = new Database();

    ArrayList<Task> list = obj.getTasks();
    for (int i = 0; i < list.size(); i++) {

        Task task = list.get(i);
        Object[] row = { task.title, task.priority, task.deadine,
                task.time, task.progress };

        // Comparing Dates

        Calendar currentDate = Calendar.getInstance();
        SimpleDateFormat formatter = new SimpleDateFormat("MM-d-yyyy");
        String dateNow = formatter.format(currentDate.getTime());

        java.util.Date systemDate = new SimpleDateFormat("MM-d-yyyy",
                Locale.ENGLISH).parse(dateNow);

        if (!task.deadine.before(systemDate)) {
            // add row to to do tab
            model_1.addRow(row);
        } else {
            // add row to done tab
            model_2.addRow(row);
        }

        // **********************

    }

    toDoTable = new JTable(model_1);
    doneTable = new JTable(model_2);
    toDoTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
    doneTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
    toDoTable.setFillsViewportHeight(true);
    doneTable.setFillsViewportHeight(true);

//here i add the JScrollPane  and it doesnt work 

    JScrollPane jpane = new JScrollPane(toDoTable);
    JScrollPane jpane1 = new JScrollPane(doneTable);

    panel.add(jpane);
    panel_1.add(jpane1);
    panel.add(jpane);
    panel_1.add(jpane1);

}
}    

If you want scroll inside a table then do,

   JScrollPane jpane = new JScrollPane(table);

But if you want the table itself to the scrolled then add the panel which is holding the table to the JScrollPane and add this to your frame.

public class JTableExample {
  public static void main(String[] args) {
    Object[] column = {"One", "Two"};
    Object[][] data = {{1, 2}, {3, 4}, {5, 6}};

    JTable toDoTable = new JTable(data, column);
    JScrollPane jpane = new JScrollPane(toDoTable);
    JPanel panel = new JPanel();
    JFrame frame = new JFrame();
    panel.add(jpane);
    frame.add(new JScrollPane(panel));
    frame.setVisible(true);
  }
}

Output:

在此处输入图片说明

Add your panel with proper layout for ex BorderLayout

  panel.add(jpane,BorderLayout.NORTH);
  panel_1.add(jpane1,BorderLayout.SOUTH);

or you can use javax.swing.Box

 Box box = Box.createVerticalBox();
 box.add(jpane);
 box.add(jpane1);
 frame.getContentPane().add(box);

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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