2013-09-10 4 views
1

поэтому у меня есть этот код:Заполните многомерный массив из базы данных Java

public class Welcome extends JFrame { 

private JPanel contentPane; 
private JTable table; 

/** 
* Launch the application. 
*/ 
public static void main(String[] args) { 
    EventQueue.invokeLater(new Runnable() { 
     public void run() { 
      try { 
       Welcome frame = new Welcome(); 
       frame.setVisible(true); 
      } catch (Exception e) { 
       e.printStackTrace(); 
      } 
     } 
    }); 
} 

/** 
* Create the frame. 
*/ 
public Welcome() { 
    setAlwaysOnTop(true); 
    setResizable(false); 
    setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); 
    setBounds(100, 100, 1024, 768); 
    contentPane = new JPanel(); 
    contentPane.setBorder(new EmptyBorder(5, 5, 5, 5)); 
    setContentPane(contentPane); 
    contentPane.setLayout(null); 

    ScrollPane scrollPane = new ScrollPane(); 
    scrollPane.setScrollPosition(new Point(0, 0)); 
    scrollPane.setBounds(10, 10, 998, 719); 
    contentPane.add(scrollPane); 

    table = new JTable(); 
    table.setModel(new DefaultTableModel(
     new Object[][] { 

     }, 
     new String[] { 
      "First Name", "Last Name", "Cellphone" 
     } 
    )); 
    table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); 
    table.setFillsViewportHeight(true); 
    table.setBounds(10, 10, 998, 718); 
    contentPane.add(table); 
} 

} 

То, что я пытаюсь сделать, это заполнить JTable с данными из базы данных, но я не знаю, как. Я имею в виду метод, отличный от метода initialize, и создаю многомерный массив там, где jTable ссылается. Я нацеливание этой строки коды:

new Object[][] { 

} 

Как я могу сделать массив многомерного объекта и заселить его с данными из базы данных ?? Gui был выполнен с использованием заслонки окна eclipse.

Спасибо, Джош

+1

Читайте на JDBC. –

ответ

1

Есть два распространенных способа сделать это, три, если растянуть немного:

ONE

Изменение этой линии битную:

new DefaultTableModel(
    loadTableData(), 
    new String[] { 
     "First Name", "Last Name", "Cellphone" 
    } 
) 

Затем вы создаете метод там в том же классе, который вызывает правильные классы и загружает базу данных ase info и создает массив 2D Object, содержащий его.

TWO

Добавить место для данных и способ, чтобы установить его:

private Object[] theData; 

public setData(Object[] data) { 
    theData = data; 
} 

Затем эта линия мы изменили в ОДНОМ выглядит следующим образом:

new DefaultTableModel(
    theData, 
    new String[] { 
     "First Name", "Last Name", "Cellphone" 
    } 
) 

Наконец , у вас должен быть другой класс с основным методом в нем, который будет загружать данные из базы данных, создавать экземпляр класса приветствия и вводить данных базы данных по телефону setData(loadedData). (Это может быть сделано весной или Guice, а также. Или просто позвонить сеттера.)

ТРИ

Третий способ создать совершенно новый класс, который является TableModel, который знает, как читать данные из базы данных. Вы передаете экземпляр этого класса в JTable, и когда данные необходимы, его можно прочитать.

Это документировано множество мест в Интернете. Я нашел Google для «Java Swing TableModel database», чтобы найти несколько примеров.

1

Как я могу создать многомерный массив объектов и заполнить его данными из базы данных? Gui был выполнен с использованием окна eclipse .

  • не я согласен все проще, довольно просто

  • Database Objects и JDBC methods возвращается по умолчанию (ResultSet) только columns и rows

  • JTable (его нижележащих XxxTableModel) является около columns и rows только

  • Swing JComponents и его XxxModel предназначены для повторного использования, как model и view слишком


  • обратно JDBC и XxxTableModel, мои следующие предложения, все точки будут около XxxTableModel

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

  • ResultSet возвращается (если isn'm нулевые) collections строк и вы должны были бы внутри петли, строка за строкой

  • каждого из строки, представляющей новую строку для XxxTableModel


  • если нет реальной и важной причины для начала работы DefaultTableModel

  • shortcut, но я бы b е предлагают использовать Vector<Vector<Object>> для DefaultTableModel и util.List или Vector<Vector<Object>> для AbstractTableModel в качестве нижележащего массива

  • все важное, что я не хочу, чтобы здесь написал очень Godd описано в Oracle учебник How to use Tables


  • не использовать нулевой макет, см. Учебники Oracle Initial Thread и Event Dispatch Thread
Смежные вопросы