Masalah:
JTable tidak muncul dalam JFrame, walaupun ditambah kepada ia.
Penyiasatan:
Kod yang disediakan cuba untuk menambah JTable pada JFrame menggunakan add(tbl_Accounts) dan add(scrollPane). Walau bagaimanapun, masalahnya nampaknya terletak di tempat lain.
Punca Punca:
Seperti yang dinyatakan dalam ulasan, penggunaan setLayout(null) boleh menyebabkan masalah dengan peletakan komponen. Semasa jadual ditambahkan pada JFrame, ia tidak ditunjukkan kerana pengurusan susun atur yang salah.
Penyelesaian:
Untuk menyelesaikan masalah ini, pengurus susun atur yang betul hendaklah digunakan. Dalam contoh ini, gabungan BorderLayout dan GridLayout boleh digunakan.
Kod Semakan:
Kod yang disemak berikut menggunakan GridLayout untuk panel utama, BorderLayout untuk panel atas dan BoxLayout untuk panel bawah:
import java.awt.BorderLayout; import java.awt.Dimension; import java.awt.GridLayout; import javax.swing.BoxLayout; import javax.swing.JButton; import javax.swing.JCheckBox; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JPasswordField; import javax.swing.JScrollPane; import javax.swing.JTable; import javax.swing.JTextField; import javax.swing.SwingConstants; import javax.swing.SwingUtilities; public class JTableFrameExample { private JFrame frame; private JPanel mainPane; private JPanel topPane; private JPanel tablePane; private JPanel bottomPane; // ... (code continues as before) public static void main(String[] args) { SwingUtilities.invokeLater(new Runnable() { @Override public void run() { new JTableFrameExample().createAndShowGui(); } }); } public void createAndShowGui() { frame = new JFrame(getClass().getSimpleName()); int rows = 30; int cols = 3; String[][] data = new String[rows][cols]; for (int i = 0; i < rows; i++) { for (int j = 0; j < cols; j++) { data[i][j] = i + "-" + j; } } String[] columnNames = { "Column1", "Column2", "Column3" }; table = new JTable(data, columnNames); scroll = new JScrollPane(table, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS); table.setPreferredScrollableViewportSize(new Dimension(420, 250)); table.setFillsViewportHeight(true); frame.setLayout(new BorderLayout()); topPane = new JPanel(); topPane.setLayout(new BorderLayout()); JLabel selectAccountLabel = new JLabel("Select Account"); topPane.add(selectAccountLabel, BorderLayout.WEST); JButton selectAccountButton = new JButton("Select Account"); topPane.add(selectAccountButton, BorderLayout.EAST); frame.add(topPane, BorderLayout.NORTH); tablePane = new JPanel(); tablePane.add(scroll); frame.add(tablePane, BorderLayout.CENTER); bottomPane = new JPanel(); bottomPane.setLayout(new GridLayout(0, 5, 3, 3)); // ... (code continues as before) frame.add(bottomPane, BorderLayout.SOUTH); frame.pack(); frame.setVisible(true); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } }
Dalam kod yang dikemas kini ini, BoxLayout telah dialih keluar. Ini membolehkan komponen dalam bottomPane disusun dalam cara yang lebih seperti grid. BorderLayout dalam bingkai telah digunakan untuk komponen topPane dan tablePane, membenarkan peletakan elemen ini dengan mudah.
Dengan perubahan ini, JTable kini sepatutnya dipaparkan dengan betul dalam JFrame.
Atas ialah kandungan terperinci Mengapa JTable Saya Tidak Dipaparkan dalam JFrame Saya (Java)?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!