Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Перерисовка JFrame. Не работает repaint(); 
V
    Опции темы
denixx
Дата 10.7.2011, 17:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 15.11.2009

Репутация: нет
Всего: нет



Приветствую, уважаемые.

У меня такая беда: работаю в JBuilder 2006, там используется JDK: java version 1.5.0_03-b07
Написал мелкий пример по работе с базой данных MySQL (выполняю запрос "select * from test.client;")
Мускул самый свежий. Но не в нём беда.

Проблема с методом makeTable(Vector rowData, Vector columnNames) в файле Window.java
Итак, при попытке убрать с панели jp3 компонент JTable jtbl1 он убирается, и вроде как происходит перерисовка окна.
Однако там есть ещё и замена jtbl1 новой таблицей и вставка этой новой таблицы на прежнее место.
Вот тут перерисовка не происходит даже при jtbl1.repaint(); jp3.repaint(); this.repaint();

Окно перерисовывается только при повторном вызове this.setVisible(true);

Меня интересует не делаю ли я через задницу всё это? )
По идее перерисовка окна должна производиться при вызове метода repaint();
Может нужно использовать что-то другое?

Привожу код обоих файлов:

Код

//com\executor\Executor.java
package com.executor;

import java.io.*;
import java.util.*;
import java.sql.*;
import com.window.*;

public class Executor {
    static Connection conn = null;
    static Window wnd = null;

    public Executor() {
    }

    public static void operation() {
        Statement stmt = null;
        try {
            stmt = conn.createStatement();
        } catch (SQLException ex2) {
        }
        ResultSet rs = null;
        try {
            rs = stmt.executeQuery(wnd.jta1.getText());
        } catch (SQLException ex1) {
            ex1.printStackTrace();
        }
        
        int columnCount = 0;
        try {
            columnCount = rs.getMetaData().getColumnCount();
        } catch (SQLException ex4) {
        }

        try {
            Vector<Vector> rowData = new Vector<Vector>();
            Vector<String> columnNames = new Vector<String>();
            for (int i = 1; i <= columnCount; i++) {
                    columnNames.addElement(rs.getMetaData().getColumnName(i));
                }

            while (rs.next()) {
                Vector<String> v = new Vector<String>(1);
                for (int i = 1; i <= columnCount; i++) {
                    v.addElement(rs.getString(i));
                    System.out.print(rs.getString(i) + "\t");
                }
                rowData.addElement(v);
                System.out.print("\r\n");
                
            }
            wnd.makeTable(rowData, columnNames);
        } catch (SQLException ex3) {
        }

        // if(rs!=null)rs.close();

        /**
         * stmt.close();
         * При закрытии Statement автоматически закрываются
         * все связанные с ним открытые объекты ResultSet
         */

        // if(stmt!=null)stmt.close();
        try {
            stmt.close();
        } catch (SQLException ex) {
        }

    }

    public static void main(String[] args) throws Exception {
        System.setOut(new PrintStream(new FileOutputStream("err.log", true), true));
        wnd = new Window();
        Class.forName("com.mysql.jdbc.Driver").newInstance();

        conn = DriverManager.getConnection(
                "jdbc:mysql://localhost:3306/test",
                "root", "root");

        if (conn == null) {
            System.out.println("Нет соединения с БД!");
            System.exit(0);
        }

    }
}


и второй файл:

Код

//com\window\Window.java
package com.window;

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import sun.awt.*;
import java.util.*;
import com.executor.*;

public class Window extends JFrame {
    JPanel jp1 = new JPanel(new VerticalBagLayout());
    JPanel jp2 = new JPanel(new FlowLayout(FlowLayout.LEFT));
    JPanel jp3 = new JPanel(new FlowLayout(FlowLayout.LEFT));
    JPanel jp4 = new JPanel(new FlowLayout(FlowLayout.LEFT));
    public JTextArea jta1 = new JTextArea(10, 60);
    public JTable jtbl1 = new JTable(2, 2);
    JButton jb = new JButton("Execute!");
    MAction mActLis = null;
    public Window() {
        super();
        this.setTitle("SQL Executor");
        this.setSize(700, 420);
        //this.setResizable(false);
        this.setMinimumSize(new Dimension(700, 420));
        this.setMaximumSize(new Dimension(700, 420));
        this.setDefaultCloseOperation(this.EXIT_ON_CLOSE);
        this.setLayout(new BorderLayout());
        this.add(jp1, BorderLayout.CENTER);
        mActLis = new MAction(this);
        jta1.setWrapStyleWord(true);
        jp2.add(jta1);
        jp3.add(jtbl1);
        jp4.add(jb);
        jb.addActionListener(mActLis);
        jp1.add(jp2);
        jp1.add(jp3);
        jp1.add(jp4);

        this.setVisible(true);
        //this.repaint();
    }

    public void makeTable(int numRows, int numColumns) {
        jtbl1 = new JTable(numRows, numColumns);
        this.repaint();
    }

    public void makeTable(Object[][] dataTable, String[] columnNames) {
        jtbl1 = new JTable(dataTable, columnNames);
        this.repaint();
    }
    
    public void makeTable(Vector rowData, Vector columnNames) {
        jp3.remove(jtbl1);
        jtbl1 = new JTable(rowData, columnNames);
        jp3.add(jtbl1);
        //jtbl1.repaint();
        //jp3.repaint();
        //this.repaint();
        //jp3.invalidate();
        //this.getContentPane().invalidate();
        //this.setVisible(false);
        this.setVisible(true);
    }


    public void performAct() {
        //System.out.println("Йа обработчик кнопки!");
        Executor.operation();
    }
}


class MAction extends AbstractAction {
    private Window adaptee;
    MAction(Window adaptee) {
        this.adaptee = adaptee;
    }

    public void actionPerformed(ActionEvent e) {
        adaptee.setCursor(new Cursor(Cursor.WAIT_CURSOR));
        if (e.getSource().equals(adaptee.jb)) {
            adaptee.performAct();
        }
        adaptee.setCursor(Cursor.getDefaultCursor());
    }
}


В мускуле таблица client содержит два поля и две записи:
Vasya    Pupkin
Sergey    Sergeev
PM MAIL   Вверх
jk1
Дата 11.7.2011, 10:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник
Сообщений: 1168
Регистрация: 17.10.2008
Где: Санкт-Петербург

Репутация: 21
Всего: 75



Цитата

Меня интересует не делаю ли я через задницу всё это? )


Именно через нее. Заменяйте не таблицу, а модель таблицы. Тогда и надобность в перерисовке окна отпадет.

О работе с моделью таблицы


--------------------
Opinions are like assholes — everybody has one
PM MAIL   Вверх
denixx
Дата 11.7.2011, 21:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 15.11.2009

Репутация: нет
Всего: нет



На другом форуме ответили, что нужно использовать метод jp3.validate();

http://www.javatalks.ru/sutra122033.php#122033

Ну и посоветовали работать с моделью таблицы тоже smile
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   jk1
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, jk1.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: GUI и Java FX приложения | Следующая тема »


 




[ Время генерации скрипта: 0.0550 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.