Голова Java JTable не отображается

У меня есть таблица, которую я хочу отображать на панели, когда нажимаю кнопку. Я могу отобразить таблицу, но не могу отобразить заголовок. Также пробовали использовать JscrollPane, но здесь вообще ничего не появляется.

Основная часть кода:

графический интерфейс открытого класса расширяет JFrame {кнопка JButton; статический фрейм JFrame; JTable tableA; JPanel TablePanel;

public static void main(String[] args) {
    frame = new GUI();

}

public GUI() {
    frame = new JFrame();
    Dimension screen = Toolkit.getDefaultToolkit().getScreenSize();

    JPanel MainPanel = new JPanel();
    MainPanel.setBackground(new Color(0, 0, 0));
    MainPanel.setBorder(new SoftBevelBorder(BevelBorder.LOWERED, null,
            null, null, null));
    MainPanel.setBounds(0, 0, screen.width, screen.height - 60);
    MainPanel.setPreferredSize(screen);
    frame.getContentPane().add(MainPanel);
    MainPanel.setLayout(null);

    button = new JButton("Show Assignments");
    button.setFont(new Font("Tahoma", Font.PLAIN, 10));
    button.setBounds(MainPanel.getWidth() / 2 - 65, 40, 130, 20);
    MainPanel.add(button);

    TablePanel = new JPanel();
    TablePanel.setBackground(new Color(245, 222, 179));
    TablePanel
            .setBorder(new EtchedBorder(EtchedBorder.LOWERED, null, null));
    TablePanel.setBounds(160, 85, MainPanel.getWidth() - 170,
            MainPanel.getHeight() - 95);
    MainPanel.add(TablePanel);
    TablePanel.setLayout(null);

    button.addActionListener(new MyActionListener());

    frame.setExtendedState(frame.MAXIMIZED_BOTH);
    frame.setVisible(true);

}

Что происходит, когда вы нажимаете кнопку.

 class MyActionListener implements ActionListener {

        public void actionPerformed(ActionEvent e) {

            String[] columnNames = { "AssignmentID", "Assignmenttype",
                    " AssignmentDesricption", "ClientID", "Status" };
            Object[][] data = {
                    {
                            "028079",
                            "Software Support",
                            "Danzafe is in need software support on their mail program.",
                            "25890", "Waiting" },
                    {
                            "028080",
                            "Software Installing",
                            "Danzafe is in need of installation of new software on thier server.",
                            "25890", "In Progress" },
                    { "028081", "Hardware Setup",
                            "Expert Beslag needs to get a new local server setup.",
                            "25891", "In Progress" },
                    {
                            "028082",
                            "Hardware Support",
                            "Expert Beslag have a computer that is making troubles with the wireless internet card",
                            "25891", "Waiting" },
                    {
                            "028083",
                            "Balacing Question",
                            "Blizzard needs help balacing out the class of World of Warcraft",
                            "00001", "Never Ends" } };

            tableA = new JTable(data, columnNames);
            tableA.setBounds(5, 35, TablePanel.getWidth() - 15,
                    TablePanel.getHeight() - 15);

            TablePanel.add(tableA.getTableHeader());
            tableA.setFillsViewportHeight(true);
            tableA.setVisible(true);
            TablePanel.add(tableA);
            TablePanel.repaint();
        }
    }
}

person silvertaildk    schedule 08.11.2012    source источник
comment
Пожалуйста, изучите соглашения об именах Java и придерживайтесь их.   -  person kleopatra    schedule 08.11.2012


Ответы (2)


  • нужно поместить JTable в JScrollPane, тогда JTableHeader должен быть виден

  • или изменить Layout Manager на JPanel с FlowLayout по умолчанию на BorderLayout

  • достать JTableHeader из JTable и положить в область NORTH

  • правильный способ - использование только JScrollPane

  • не использовать setBounds(), используйте built_in BorderLayout для JFrame и вставьте JScrollPane (только, возможно, нет причин использовать JPanel, только в том случае, если вы планируете использовать CardLayout) в CENTER area

  • остальная часть JComponent(s) помещена в отдельную JPanel, эта JPanel, помещенная в область NOTHR или SOUTH, пришла из JFrame

person mKorbel    schedule 08.11.2012
comment
Спасибо за помощь, к сожалению, что бы я ни делал, это все равно не работает, поэтому я хотел бы спросить, могу ли я привести пример в коде. - person silvertaildk; 08.11.2012
comment
Выберите пример. - person trashgod; 08.11.2012

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

person Sujan Shrestha    schedule 08.11.2012