JTable выглядит пустым - PullRequest
       84

JTable выглядит пустым

0 голосов
/ 22 октября 2018

Я опубликую только ту часть, которая имеет значение.

Я создал JFrame с JPanel в нем, который содержит некоторые JTextFields, JTextAreas и JList.Я знаю, хочу добавить JTable, чтобы показать некоторые результаты, но он будет пустым.Я попытался проверить некоторые сообщения, но я не смог это исправить.

Я ввел 2 строки вручную, но они не появлялись.И не будут имена столбцов.Пожалуйста, помогите!

import javax.swing.*;
import javax.swing.table.*;
import java.util.*;
import java.awt.*;
import java.awt.event.*;

public class GUI_Automata_Ex_1 extends JFrame {

    public static int ScreenWidth = Toolkit.getDefaultToolkit().getScreenSize().width;
    public static int ScreenHeight = Toolkit.getDefaultToolkit().getScreenSize().height;

    public static int WindowWidth = ScreenWidth*3/4;
    public static int WindowHeight = WindowWidth*9/16;

    public static int unit = WindowWidth/160;

    // tables used
    static String[] columnNames = {"word", "length", "result"};
    static Object[][] data = {{"abbaa", new Integer (5), "belongs"}, {"baabbb", new Integer (6), "does not belong"}};
    public static JTable table_saved_words = new JTable(data, columnNames);
    public static DefaultTableModel dtm_saved_words = new DefaultTableModel();
    public static JScrollPane sp_saved_words;

    public GUI_Automata_Ex_1 () {

        // this will only run on ultrawide screens (e.g. 21:9 or 32:9) because the window is 16:9 optimized
        if (ScreenWidth/2 > ScreenHeight) {
            WindowHeight = ScreenHeight*3/4;
            WindowWidth = WindowHeight*16/9;
            unit = WindowWidth/160;
        }

        this.setTitle("Automata Theory 1st Excercise");
        this.setBounds(ScreenWidth/2-WindowWidth/2,ScreenHeight/2-WindowHeight/2,WindowWidth,WindowHeight);
        this.setResizable(false);
        this.setVisible(true);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setBackground(colorBG);

        Board board = new Board();
        this.setContentPane(board);
        this.setLayout(null);

        // TABLES

        // settings for table_saved_words
        table_saved_words.setBackground(Color.white);
        table_saved_words.setFont(fontM);
        table_saved_words.setModel(dtm_saved_words);
        table_saved_words.setPreferredScrollableViewportSize(new Dimension(unit*86, unit*50));
        table_saved_words.setFillsViewportHeight(true);
        sp_saved_words = new JScrollPane(table_saved_words);
        board.add(sp_saved_words);
        sp_saved_words.setBounds(unit*68, unit*32, unit*86, unit*50);
        sp_saved_words.setWheelScrollingEnabled(true);
        sp_saved_words.setViewportView(table_saved_words);
        sp_saved_words.setVisible(false);

        dtm_saved_words.addRow(new Object[]{"aabbbbaa", 5, "belongs"});

    }

    public class Board extends JPanel {
        public void paintComponent (Graphics g) {

        }
    }

}

}

Вот скриншот:

https://i.stack.imgur.com/AHtLf.png

JTable находится в правом нижнем углу.Я не включил часть кода для других J-компонентов.

Что я хочу сделать после того, как я получу списки для показа, это просто добавить несколько строк при запуске окна (слова, которые вводит пользователь и принадлежат либов словарь или нет и их длину), но часть, на которой я застрял - это получение JTable для отображения столбцов и данных.

1 Ответ

0 голосов
/ 22 октября 2018

В вашей табличной модели нет столбцов, поэтому она никогда не отображает добавляемые в нее данные.

Из документации для конструктора DefaultTableModel с нулевым аргументом

Создает значение по умолчанию DefaultTableModel, которое представляет собой таблицу с нулевыми столбцами и нулевыми строками.

Изначально в вашей таблице есть действительная модель таблицы, созданная автоматически:

JTable table_saved_words = new JTable(data, columnNames);

Нозатем вы создаете новую модель без столбцов:

DefaultTableModel dtm_saved_words = new DefaultTableModel();
...