I am currently making a program for my school project, it is a fast food order calculator, my problem is that I have to be able to display the table inside the JFrame in Main, if I add “frame.add(table);” inside Main, nothing happens. Any help would be appreciated, thank you!
JTable table; JTable FastFoodCalculatorProgramming; public FastFoodCalculatorProgramming() { setLayout(new FlowLayout()); String[] columnNames = {"Product", "Description", "Item Price"}; Object[][] data = { {"Product1", "Description1", "Price1"}, {"Product2", "Description2", "Price2"}, {"Product3", "Description3", "Price3"}, {"Product4", "Description4", "Price4"}, {"Product5", "Description5", "Price5"}, {"Product6", "Description6", "Price6"}, {"Product7", "Description7", "Price7"}, {"Product8", "Description8", "Price8"},}; table = new JTable(data, columnNames) { public boolean isCellEditable(int data, int columnNames) { return false; } }; table.setPreferredScrollableViewportSize(new Dimension(500, 250)); table.setFillsViewportHeight(true); JScrollPane scrollPane = new JScrollPane(table); add(scrollPane); } public static void main(String[] args) { FastFoodCalculatorProgramming table = new FastFoodCalculatorProgramming(); table.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); table.setSize(600, 200); table.setVisible(true); table.setTitle("Fast Food Order Calculator"); JLabel label = new JLabel(); label.setText("Welcome to Fast Food Calculator!"); label.setFont(new Font("Century Gothic", Font.BOLD, 30)); label.setVerticalAlignment(JLabel.TOP); label.setHorizontalAlignment(JLabel.CENTER); label.setBorder(new EmptyBorder(20, 0, 0, 0)); JFrame frame = new JFrame(); frame.setVisible(true); frame.setSize(1000, 800); frame.setResizable(false); frame.setTitle("Fast Food Calculator"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.getContentPane().setBackground(Color.gray); frame.add(label); }
}
Advertisement
Answer
- Add
frame.add(JScrollPane(table));
- Change
frame.add(label);
toframe.add(label, BorderLayout.NORTH);
- Move
frame.setVisible(true);
to the end of themain
method - Remove
frame.setSize(1000, 800);
andframe.setResizable(false);
- Add
frame.pack()
beforeframe.setVisible(true);
import java.awt.BorderLayout; import java.awt.EventQueue; import java.awt.Font; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JScrollPane; import javax.swing.JTable; import javax.swing.border.EmptyBorder; import javax.swing.table.DefaultTableModel; import javax.swing.table.TableModel; public class Main { public static void main(String[] args) { new Main(); } private JTable table; private TableModel tableModel; private JLabel titleLabel; public Main() { EventQueue.invokeLater(new Runnable() { @Override public void run() { JFrame frame = new JFrame(); frame.add(getTitleLabel(), BorderLayout.NORTH); frame.add(new JScrollPane(getTable())); frame.pack(); frame.setLocationRelativeTo(null); frame.setVisible(true); } }); } protected JLabel getTitleLabel() { if (titleLabel != null) { return titleLabel; } titleLabel = new JLabel(); titleLabel.setText("Welcome to Fast Food Calculator!"); titleLabel.setFont(new Font("Century Gothic", Font.BOLD, 30)); titleLabel.setVerticalAlignment(JLabel.TOP); titleLabel.setHorizontalAlignment(JLabel.CENTER); titleLabel.setBorder(new EmptyBorder(20, 0, 0, 0)); return titleLabel; } protected JTable getTable() { if (table != null) { return table; } table = new JTable(getTableModel()); return table; } protected TableModel getTableModel() { if (tableModel != null) { return tableModel; } String[] columnNames = {"Product", "Description", "Item Price"}; Object[][] data = { {"Product1", "Description1", "Price1"}, {"Product2", "Description2", "Price2"}, {"Product3", "Description3", "Price3"}, {"Product4", "Description4", "Price4"}, {"Product5", "Description5", "Price5"}, {"Product6", "Description6", "Price6"}, {"Product7", "Description7", "Price7"}, {"Product8", "Description8", "Price8"} }; tableModel = new DefaultTableModel(data, columnNames); return tableModel; } }
Personally, I always get out of a static
context as soon as I can, it will just make life easier