Reputation: 335
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);
}
}
Upvotes: 1
Views: 22761
Reputation: 8865
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:
Upvotes: 8
Reputation: 11298
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);
Upvotes: 3