2014-02-01 5 views
0

У меня есть этот класс, а другой для подключения к базе данных и показать мне таблицу базы данных эта часть программы работает довольно хорошо проблема пояснено ниже, но нет:JInternalFrame с JTable, внутри JFrame

import java.awt.Color; 
import java.awt.event.*; 
import java.sql.SQLException; 
import javax.swing.*; 
public class ManagerInterface { 
public static JFrame ManagerInterface = new JFrame("Manager Interface"); 

public ManagerInterface() { 
    StartInterfaceGUI(); 
} 

public static JFrame getframe() { 
    return ManagerInterface; 
} 
private void StartInterfaceGUI() { 



    ManagerInterface.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    ManagerInterface.setSize(1600, 900); 
    new ShowEmployee(); 
    ManagerInterface.setVisible(true); 
} 
} 
public static void main(String []args) 
{ 
    new ManagerInterface(); 
} 

и этот класс:

import java.awt.BorderLayout; 
import java.awt.event.KeyEvent; 
import java.awt.event.KeyListener; 
import java.sql.*; 
import java.util.*; 

import javax.swing.*; 
import GUIManager.ManagerInterface; 

public class ShowEmployee { 

public static JInternalFrame frame = new JInternalFrame(); 
public JTable table = new JTable(); 
public JFrame mainframe = new JFrame(); 

public ShowEmployee() { 

    frame.add(table); 
    JScrollPane scroll = new JScrollPane(table); 
    frame.getContentPane().add(scroll, BorderLayout.SOUTH); 
    frame.setTitle("Employees"); 
    frame.setResizable(true); 
    frame.setClosable(true); 
    frame.setMaximizable(true); 
    frame.setIconifiable(true); 
    frame.setSize(650, 400); 
    frame.pack(); 
    frame.setVisible(true); 

      /* mainframe.add(frame); 
    mainframe.setSize(650, 400); //adding frame inside mainframe defined in this class 
    mainframe.pack(); 
    mainframe.setVisible(true);*/ 


    //ManagerInterface.getframe().add(frame); //adding the internalframe to manager interface frame 


} 
} 

Я использую ManagerInterface в качестве контейнера для ShowEmployee, таким образом:

  • в ManagerInterface я называю JFrame

  • класс ShowEmployee представлен JInternalFrame, на котором добавить JTable.

  • я добавить JInternalFrame к раме из managerInterface класса, который определяется линией ManagerInterface.getframe.add. (Рамка), вставляется в ShowEmployee.

Проблема заключается в следующем:

  • если я определить кадр (в данном случае мэйнфреймов) внутри ShowEmployee и я добавить internalframe я вижу это: enter image description here

  • Однако, если я добавлю JInternalFrame к фрейму ManagerInterface, я вижу следующее: enter image description here

Другими словами, я не видите атрибуты строки таблицы, представленного ScrollPane, она не видна на внутренней стороне рамы managerInterface, я определить ScrollPane в этом путь, определенный в ShowEmployee. JScrollPane scroll = new JScrollPane (таблица); frame.getContentPane (.) Добавить (прокрутить BorderLayout.SOUTH);

+1

Несвязанный: ознакомьтесь с условными обозначениями java и придерживайтесь их. – kleopatra

+1

Весь этот код действительно не нужен. Особенно, когда вы используете сторонние библиотеки, которые мы можем или не можем попробовать запустить пример. Также проблема, похоже, не имеет ничего общего с базой данных. Вы могли бы легко создать [** пример Minimal, Complete, Tested and Readable **] (http://stackoverflow.com/help/mcve), используя статические имена для заголовков. Для лучшей помощи в ближайшее время, попробуйте создать MCTRE, как показано в ссылке –

+0

отредактированный код, @peeskillet – OiRc

ответ

3
  1. Как @kleopatra отметил, следовать ява соглашение об именах. переменные начинаются с нижнего регистра.

  2. Почему в мире вы называете JFrameManagerInterface, когда имя класса ManagerInterface?

  3. Почему в мире у вас есть два метода main? Вам это нужно только в классе запуска ManagerInterface.

  4. Просто сделать ShowEmployee подкласс JInternalFrame.Тогда просто добавить его в JFrame (что вы собираетесь назвать что-то еще), что находится в ManagerInterface

    public class ManagerInterface { 
        private Frame frame; 
        private ShowEmployees showEmployee; 
    
        public ManagerInterface() { 
         showEmployees = new ShowEmployees(); 
    
         frame = new JFrame("MagagerInterface"); 
         frame.add(new ShowEmployees()); 
         frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
         frame.pack(); 
         frame.setLocationRelativTo(null); 
         frame.setVisible(true); 
        } 
    } 
    
    public class ShowEmployees extends JInternalFrame { 
        public ShowEmployees() { 
    
        } 
    } 
    
  5. Добавление к 4. Вы должны добавлять JInternalFrame в JDesktopPane с и не JFrame

    JDesktopPane desktop; 
    
    public ManagerInterface() { 
        showEmployees = new ShowEmployees(); 
        desktop = new JDesktopPane(); 
        desktop.add(showEmployees); 
    
        frame = new JFrame("MagagerInterface"); 
        frame.setContentPane(desktop); 
        .... 
    } 
    
  6. Выполнить ваш Свинг приложение из EDT

    public static void main(String[] args) { 
        SwingUtilities.invokeLater(new Runnable(){ 
         public void run() { 
          new ManagerInterface(); 
         } 
        }); 
    } 
    

    См. Initial Threads

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

    frame.add(table); <<---------------------Get Rid of MEEEE! 
    JScrollPane scroll = new JScrollPane(table); 
    frame.getContentPane().add(scroll, BorderLayout.SOUTH); 
    

Вот бегущий пример со всеми выше исправлением.

import javax.swing.*; 

public class ManagerInterface { 

    public JFrame frame = new JFrame("Manager Interface"); 

    private ShowEmployee showEmployee; 
    private JDesktopPane desktop; 

    public ManagerInterface() { 
     showEmployee = new ShowEmployee(); 
     desktop = new JDesktopPane(); 
     desktop.add(showEmployee); 

     frame = new JFrame("MagagerInterface"); 
     frame.setContentPane(desktop); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.setSize(600, 600); 
     frame.setLocationRelativeTo(null); 
     frame.setVisible(true); 
    } 

    public static void main(String[] args) { 
     SwingUtilities.invokeLater(new Runnable() { 
      public void run() { 
       new ManagerInterface(); 
      } 
     }); 
    } 
} 

class ShowEmployee extends JInternalFrame { 

    String[][] data = {{"Hello", "Hello", "Hello"}, 
    {"Hello", "Hello", "Hello"}}; 
    String[] cols = {"Col 1", "Col 2", "Col 3"}; 

    public JTable table = new JTable(data, cols); 

    public ShowEmployee() { 

     JScrollPane scroll = new JScrollPane(table); 
     getContentPane().add(scroll); 
     setTitle("Employees"); 
     setResizable(true); 
     setClosable(true); 
     setMaximizable(true); 
     setIconifiable(true); 
     pack(); 
     setVisible(true); 

    } 
} 
+0

@HovercraftFullOfEels только исправлено :) –

+0

спасибо , для ответа я забыл отменить основной метод на showEmployee, я использовал для отладки в своей идее, я использовал имя managerInterface как имя класса, потому что для меня проще запомнить. – OiRc

+1

@CiMat: также старайтесь не злоупотреблять статическим модификатором. Вы делаете это в коде, который вы разместили. –

Смежные вопросы