2014-11-21 2 views
0

Я разрабатываю свое новое приложение в Swing, и я хочу повторно использовать JChempaint в этом приложении. У меня есть jar-файл JChempaint-апплета (который разработан в Swing с использованием JApplet).Добавить JApplet to JPanel

В принципе, я хочу добавить файл jar в JPanel в мое новое приложение. Во всяком случае, возможно ли это? JChempaint является открытым исходным кодом, у меня также есть исходный код.

Как добавить апплет JChempaint на панель?


Ниже приведены подробности после попытки реализовать предложения ------ я начал с моим проектом и пытался развить скелет встраивать окна JChemPaint в нем. Ниже приводится код моего макета:

package LearnSwingPkg; 

import java.awt.BorderLayout; 

class SplitPane extends JFrame { 

private JPanel panel1; 
private JPanel panel2; 
private JScrollPane panel3; 
private JScrollPane panel4; 

protected JSplitPane split; 

public SplitPane(){ 

    super("Learn Swing"); 
    JFrame.setDefaultLookAndFeelDecorated(true); 
    setSize(900, 700); 
    setDefaultCloseOperation(EXIT_ON_CLOSE); 
    setLocation(0,0); 

    setTitle("Split Pane Application"); 

    JPanel topPanel = new JPanel(); 
    topPanel.setLayout(new BorderLayout()); 
    getContentPane().add(topPanel); 

    // Create the panels 
    createPanel1(); 
    createPanel2(); 
    createPanel3(); 
    createPanel4(); 

    JSplitPane spLeft = new JSplitPane(JSplitPane.VERTICAL_SPLIT, true,panel1, panel3); 
    JSplitPane spRight = new JSplitPane(JSplitPane.VERTICAL_SPLIT,true, panel2, panel4); 

    split = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, true,spLeft, spRight); 
    split.setOneTouchExpandable(true); 

    getContentPane().add(split, BorderLayout.CENTER); 



} 
//top left 
public void createPanel1(){ 
    panel1 = new JPanel(); 
    panel1.setLayout(new BorderLayout()); 
    panel1.add((new TextArea("Panel1"))); 

    panel1.setPreferredSize(new Dimension(450, 400)); 
    panel1.setMaximumSize(new Dimension(450, 400)); 
} 


//top right 
public void createPanel2(){ 
    panel2 = new JPanel(); 
    panel2.setLayout(new BorderLayout()); 
    panel2.add((new TextArea("Panel2"))); 
    panel2.setPreferredSize(new Dimension(450, 400)); 
    panel2.setMaximumSize(new Dimension(450, 400)); 

} 

//bottom left 
public void createPanel3(){ 
    Label label_prop = new Label("Properties:", Label.LEFT); 

    String[] columnNames = {"Properties", 
      "", 
      }; 
    Object[][] data = { 
      {"", "",}, {"", ""}, {"", ""},{"", ""}, 
      {"", "",}, {"", ""}, {"", ""},{"", ""}, 
      {"", "",}, {"", ""}, {"", ""},{"", ""} 
      }; 


    JTable table = new JTable(data, columnNames); 
    table.setBackground(getBackground()); 
    table.setBackground(Color.LIGHT_GRAY); 
    table.setRowHeight(20); 
    table.setBorder(BasicBorders.getMenuBarBorder()); 

    panel3 = new JScrollPane(table, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZO 
    panel3.add(label_prop); 
    panel3.setPreferredSize(new Dimension(20, 20)); 
    panel3.setMinimumSize(new Dimension(20, 20)); 

} 
//bottom right 
public void createPanel4(){ 

    panel4 = new JScrollPane(); 
     //panel4.setLayout(new FlowLayout()); 
    String[] columnNames = {"Activities", 
       "", 
       }; 
     Object[][] data = { 
        {"", "",}, {"", ""}, {"", ""},{"", ""}, 
        {"", "",}, {"", ""}, {"", ""},{"", ""}, 
        {"", "",}, {"", ""}, {"", ""},{"", ""} 
        }; 


     JTable table = new JTable(data, columnNames); 
     table.setBackground(getBackground()); 
     table.setBackground(Color.LIGHT_GRAY); 
     table.setRowHeight(20); 
     table.setBorder(BasicBorders.getMenuBarBorder()); 
     panel4 = new JScrollPane(table, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS); 
    panel4.setPreferredSize(new Dimension(20, 20)); 
    panel4.setMinimumSize(new Dimension(20, 20)); 


} 

public static void main(String args[]){ 
    try { 
     UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel"); 
    } catch (Exception evt) {} 
    // Create an instance of the test application 
    SplitPane mainFrame = new SplitPane(); 
    mainFrame.setVisible(true); 
    mainFrame.setBackground(Color.blue); 
    } 
} 

За время того, я попытался вставить пустую таблицу, в приведенном выше коде. Позже он будет заполнен соответствующими данными.

Это дает мне рамку с четырьмя блоками, в верхнем левом окне будет окно JCHemPaint, нижние два блока будут иметь таблицу.

Теперь для того, чтобы добавить JChemPaint панели 1 редактировал код в этом file.i изменил метод createPanel1:

//top left 
public void createPanel1(){ 
    panel1 = new JPanel(); 
    panel1.setLayout(new BorderLayout()); 
    JChemPaint.showInstance(filename, null, null, debug); 
    panel1.setPreferredSize(new Dimension(450, 400)); 
    panel1.setMaximumSize(new Dimension(450, 400)); 
} 

Это выводит меня только окно JChemPaint.

Я не могу поместить его в панель 1, если мои рамки. Как я могу это сделать? Спасибо!

+4

«jar», который является zip-файлом, который содержит классы и ресурсы Java, не является компонентом Swing и поэтому не может рассматриваться как таковой. Итак, краткий ответ на ваш прямой вопрос: «Я могу добавить Jar в JPanel?» «Нет, вы не можете. Но если файл jar содержит классы Swing, которые простираются от компонентов Swing, таких как JPanel или JComponent, и документация или исходный код смогут вам рассказать, тогда да, вы можете использовать объекты этих классов в своем собственном графическом интерфейсе Swing. –

+1

Большое вам спасибо. Это определенно поможет мне. – ksk

ответ

3

Как предложено here, JChemPaint - стандартное приложение Java. См. showInstance() на примере построения JChemPaintPanel и добавления его к JFrame.

+0

Спасибо @trashgod. Я рассмотрю этот пример и вернусь к вам, если у меня возникнут проблемы. – ksk

+0

Это похоже на гибридный апплет/приложение; некоторые связанные примеры приводятся здесь [здесь] (http://stackoverflow.com/a/12449949/230513). – trashgod