Перейти к публикации

мастер-форма


Geksa

Рекомендованные сообщения

Делаю кастомизацию мастер-формы. Мне нужно на нее добавить кнопку. Сама кнопка добавляется, но как только вешаю на нее обработчик действия, ТЦ выдает, что не возможно выполнить визуализацию и выдается стандартная форма. С чем это может быть связано? TCE 8.3

Ссылка на сообщение
Поделиться на других сайтах


ТЦ выдает, что не возможно выполнить визуализацию

из под эклипса выдает?
Ссылка на сообщение
Поделиться на других сайтах

В ТС 8.3 на мастер-форме втыкаем кнопку(Swing), вешаем слушатель, простое действие добавление текста в текстовое поле, всё рисуется и срабатывает без проблем. Может что то в вашем коде в обработчике?

Ссылка на сообщение
Поделиться на других сайтах

package com.mycom.forms;

import java.awt.BorderLayout;

import java.awt.GridBagConstraints;

import java.awt.GridBagLayout;

import java.awt.Insets;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import javax.swing.JButton;

import javax.swing.JLabel;

import javax.swing.JPanel;

import javax.swing.JTabbedPane;

import javax.swing.JTextField;

import com.teamcenter.rac.kernel.TCComponentForm;

import com.teamcenter.rac.kernel.TCComponentItem;

import com.teamcenter.rac.util.MessageBox;

public class Bolt2 extends javax.swing.JPanel {

private JPanel jLabel1;

private JPanel jPanel1;

private JTextField oboznachenie;

private JTextField jTextField2;

private JButton jButton;

private JLabel jLabel2;

private JTabbedPane jTabbedPane1;

public Bolt2(TCComponentForm form) {

super();

initGUI(form);

}

private void initGUI(TCComponentForm form) {

try {

TCComponentItem comp = (TCComponentItem) form.getReferenceProperty("item_for_form");

BorderLayout thisLayout = new BorderLayout();

this.setLayout(thisLayout);

{

jLabel1 = new JPanel();

BorderLayout jLabel1Layout = new BorderLayout();

jLabel1.setLayout(jLabel1Layout);

this.add(jLabel1, BorderLayout.NORTH);

jLabel1.setPreferredSize(new java.awt.Dimension(400, 21));

{

jLabel2 = new JLabel();

jLabel1.add(jLabel2, BorderLayout.EAST);

jLabel2.setText("\u041c\u0430\u0442\u0435\u0440\u0438\u0430\u043b");

jLabel2.setPreferredSize(new java.awt.Dimension(94, 21));

jLabel2.setFont(new java.awt.Font("Tahoma",1,11));

}

}

{

jTabbedPane1 = new JTabbedPane();

this.add(jTabbedPane1, BorderLayout.CENTER);

jTabbedPane1.setPreferredSize(new java.awt.Dimension(400, 282));

{

jPanel1 = new JPanel();

jTabbedPane1.addTab("Общие данные", null, jPanel1, null);

GridBagLayout jPanel1Layout = new GridBagLayout();

jPanel1Layout.rowWeights = new double[] {0.06, 0.06, 0.15, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1};

jPanel1Layout.rowHeights = new int[] {7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7};

jPanel1Layout.columnWeights = new double[] {0.0, 0.1, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.1};

jPanel1Layout.columnWidths = new int[] {40, 20, 118, 24, 170, 29, 78, 37, 28, 7};

jPanel1.setLayout(jPanel1Layout);

jPanel1.setPreferredSize(new java.awt.Dimension(407, 279));

jPanel1.add(getjButton(), new GridBagConstraints(7, 2, 2, 1, 0.0, 0.0, GridBagConstraints.CENTER, GridBagConstraints.NONE, new Insets(0, 3, 0, 3), 0, 0));

jPanel1.add(getOboznachenie(), new GridBagConstraints(4, 2, 3, 1, 0.0, 0.0, GridBagConstraints.CENTER, GridBagConstraints.HORIZONTAL, new Insets(0, 0, 0, 0), 0, 0));

}

}

{

jTextField2 = new JTextField();

this.add(jTextField2, new GridBagConstraints(1, 0, 1, 1, 0.0, 0.0, GridBagConstraints.CENTER, GridBagConstraints.NONE, new Insets(0, 0, 0, 0), 0, 0));

jTextField2.setText("Bolt");

}

} catch (Exception e) {

e.printStackTrace();

}

}

private JTextField getOboznachenie() {

if(oboznachenie == null) {

oboznachenie = new JTextField();

oboznachenie.setPreferredSize(new java.awt.Dimension(300, 20));

oboznachenie.setText("jTextField1");

}

return oboznachenie;

}

private JButton getjButton() {

if(jButton == null) {

jButton = new JButton();

jButton.setText("М");

jButton.setSize(30, 23);

jButton.addActionListener(new ActionListener(){

@Override

public void actionPerformed(ActionEvent arg0) {

MessageBox.post("Pressed", "", MessageBox.INFORMATION);

}

});

}

return jButton;

}

}

При нажатии всего лишь вывожу сообщение... Может в настройках формы что-то менять надо?

Изменено пользователем Geksa
Ссылка на сообщение
Поделиться на других сайтах

Не слышал про такой нюанс в TCUA - AWT/SWT bridge?Про это также говорится в документации в самом начале.

Не уверен что именно это поможет,но если при кастомизации клиента хотите использовать swing библиотеки и компоненты как в старых версиях,то делать это надо

через AWT/SWT bridge.

Using the SWT/AWT Bridge



Minimally, embedding an AWT frame inside an SWT composite is just two simple lines of code

	

	Composite composite = new Composite(parent, SWT.EMBEDDED | SWT.NO_BACKGROUND);

	Frame frame = SWT_AWT.new_Frame(composite);

	  



An instance of org.eclipse.swt.Composite is created with the SWT.EMBEDDED style. This style signals that an AWT frame is to be embedded inside the Composite. The call to the static new_Frame method creates and returns such a frame. The frame may then be populated with AWT and/or Swing components. 



The returned frame is not a standard AWT frame. By default, it is a subclass of java.awt.Frame that is meant to be embedded within native applications. In fact, it is the same frame that is used to embed applets inside a browser window.
т.е в SWT контейнер нужно встроить AWT компонент, в данном случае frame. А далее можно использовать привычный swing.

Либо используйте новые библиотеки - например JFace или те же SWT.

Ссылка на сообщение
Поделиться на других сайтах

причем тут мост? Это же мастер-форма, она кладется на javax.swing.JPanel, и хорошо работает со свингом.

Ссылка на сообщение
Поделиться на других сайтах

Composite composite = new Composite(parent, SWT.EMBEDDED | SWT.NO_BACKGROUND);

parent здесь откуда и из чего берется?

Ссылка на сообщение
Поделиться на других сайтах

Прицепила ваш болт на тестовый проект, все работает нормально( хотя я бы малость не так сделала). вот скрин во вложении.

Экземпляр формы Bolt2(TCComponentForm form) вызывается из класса MyForm extends AbstractRendering, в котором идет чтение и сохранение атрибутов.

post-32426-1315895154_thumb.jpg

post-32426-1315895170_thumb.jpg

Ссылка на сообщение
Поделиться на других сайтах

Кажется начинаю понимать, в чем дело. Я создаю скомпилированный джава-класс, а потом вызываю его из командной строки. Может не находит какие-то библиотеки..

cd C:\Program Files\Java\jdk1.6.0_26\bin

java -classpath C:\Teamcenter8\bin\Bolt2

Ссылка на сообщение
Поделиться на других сайтах

Кажется начинаю понимать, в чем дело. Я создаю скомпилированный джава-класс, а потом вызываю его из командной строки. Может не находит какие-то библиотеки..

cd C:\Program Files\Java\jdk1.6.0_26\bin

java -classpath C:\Teamcenter8\bin\Bolt2

у вас точно ТС8.3? он же построен на методике плагинов.... зачем вам командная строка? или я что то не понимаю?
Ссылка на сообщение
Поделиться на других сайтах

Точно. Я решила по-другому сделать: чтобы форма появлялась при создании айтема. Вот только возможно ли следующее: Файл->Создать изделие, потом появляется тимцентровская форма, назначается id, имя изделия (изделие 1), нажимается кнопка Готово, потом появляется моя форма, назначается новый айди и имя (изделие 2), и айтем сохраняется уже с новыми значениями? У меня пока только одна мысль: отлавливаю событие сохранения изделия и не позволяю создаться изделию 1, а создаю изделие 2. Но как-то мне это не нравится..

Ссылка на сообщение
Поделиться на других сайтах

Вроде бы в rich_client_customization_programmers_guide.pdf описано как переопределять события ТС, поищите-ка....

назначается id, имя изделия (изделие 1), нажимается кнопка Готово, потом появляется моя форма, назначается новый айди и имя (изделие 2), и айтем сохраняется уже с новыми значениями

а зачем все это надо?, может просто применить правила именования айтемов (или как их там) в администрировании

Ссылка на сообщение
Поделиться на других сайтах

Нее, просто применить правила именования нельзя. Нужно выдать пользователю список, из которого он уже выберет нужное, и на основе этого идет формирование айди и имени.

Ссылка на сообщение
Поделиться на других сайтах

Нужно выдать пользователю список, из которого он уже выберет нужное, и на основе этого идет формирование айди и имени.

создайте свою кнопку в панели инструментов со своим механизмом создания айтема.

Ссылка на сообщение
Поделиться на других сайтах

Да, тоже думала о таком варианте, но хотелось бы чтобы пользователь создавал как обычно, через файл -> создать изделие.

Ссылка на сообщение
Поделиться на других сайтах

Присоединяйтесь к обсуждению

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

Гость
Ответить в тему...

×   Вставлено в виде отформатированного текста.   Вставить в виде обычного текста

  Разрешено не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.

  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу.




×
×
  • Создать...