У меня проблема с отображением JTable в Java - PullRequest
0 голосов
/ 18 марта 2020

Сначала я создал структуру JTable в классе JPanel

 public void paint(Graphics g) {
        // TODO Auto-generated method stub
        this.setLayout(null);


        Object [][] data = {};

        String[] cols = {"Student ID", "Student Name", "D.O.B", "Contact info"};
        DefaultTableModel model = new DefaultTableModel(data, cols);
        JTable table = new JTable(model) {
             public boolean isCellEditable(int row, int column){
                    return false;
               }
        };
        JScrollPane scroll = new JScrollPane(table);
        scroll.setBounds(20, 50, 620, 200); 
        add(scroll);

, а затем я обновил группу данных в строки JTable методом ActionListener, когда я добавляю кнопку «Загрузить» Load.addActionListener(listener);

ActionListener listener = new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                // TODO Auto-generated method stub

                if(e.getSource() == Load) {
                    JFileChooser f = new JFileChooser();
                    int result = f.showOpenDialog(null);

                    if(result == JFileChooser.APPROVE_OPTION) {

                        String Path= f.getSelectedFile().getAbsolutePath();

                        path.setText(Path);



                        Object[][] vector = new String[Dem_Dong(Path)][4]; 
                        String[] cols = {"Student ID", "Student Name", "D.O.B", "Contact info"};

                        for (int i = 0; i < Dem_Dong(Path); i++) {

                        String[] array = Doc_File(Path, i).split("#");
                        vector[i][0] = array[0];
                        vector[i][1] = array[1];
                        vector[i][2] = array[2];
                        vector[i][3] = array[3];
                        }
                        model.setDataVector(vector, cols);
                }
            }

Мой JTable появляется, но с такой неудобной проблемой, как эта введите описание изображения здесь

Я пробовал много способов, которые я искал в Google, но никто не может мне помочь. Если вы знаете это, пожалуйста, дайте мне знать, я новичок колледжа во Вьетнаме, надеюсь, вы понимаете мой вопрос. Большое спасибо

1 Ответ

1 голос
/ 18 марта 2020
public void paint(Graphics g) {
     // you are currently create your JTable and GUI components here
}

Вы делаете весь этот GUI строительный код в методе рисования, то есть, прямо скажем, безумие. Поместите его в код, который вызывается один раз и только один раз, например, в конструктор класса. Метод рисования должен быть только для рисования.

Предложения:

  • Извлеките этот код из краски в конструктор класса
  • Вы не должны переопределять рисование, чтобы начать с
  • Если вам нужно сделать собственное рисование (вы еще не показываете, что делаете), это должно быть сделано в методе paintComponent класса, расширяющего JPanel, а не в методе рисования
...