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

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


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 пользователей

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



  • Сообщения

    • Snake 60
      Скорее всего исправляли в конкретной сборке, для конкретных тел. Насколько я помню, надо в самом эскизе профиля заполнить свойство Description
    • Snake 60
      Делаете дырку в свае - вставляете в нее трубу и 2 человеко-силы крутят сваю ) Дёшево и сердито и не нужен никакой планетарный редуктор ))
    • gudstartup
      вы всегда ищите свой путь или будете делать то что вам советуют? с самого начала прежде чем приступать к экспериментам вам нужно было вынуть носитель и сделать образ. diskcopy делает копию гибкого диска на другой а вам надо сделать образ жесткого диска или карты памяти. делайте как советует @Viktor2004 иначе еще чего нибудь сломаете или вам станок не нужен и вы его приобрели для экспериментов ? вот а печатной машинке из прошлого нельзя а вот на синумерике можно - удивительные вещи в настоящем происходят!! на 100 % уверен что там не модуль а либо писимиси ай либо жд @mircomax81 хотите работать в дос почитайте помощь по командам 
    • PuKoLLleT
      Доброго дня всем. Поделитесь опытом,раньше такое не доводилось делать. На торце фланца нужно сделать  восемь отверстий ф17H7 на токарно-фрезерном станке с осью Y ,имеется ManualGuide.В моем понимании нужно просверлить,а затем торцевой фрезой расточить нужный диаметр.Получится такой фокус,или надо разверткой доводить нужный размер?  Стойка Fanuc 0i-Tf.
    • Snake 60
      Всё верно, я даже русификатор делал для него (ушло на это где-то около года). Хороший софт был, я всех знакомых на него подсадил в свое время :) У меня даже где-то образ на виртуалке лежит с SW2014+MechSoft, Жаль, что автодеск его поглотил, а не DS :( А по сути вопроса, проектировал двухступенчатый планетарный редуктор в свое время. Что было нужно: Справочник по планетаркам (автора не помню, если надо поищу), из софта MathCAD + GearTeq (софтина идет вместе с GearTrax, только рассчитывает и моделирует несколько зацеплений согласно выбранной схеме, в том числе планетарки) Ой и ошибаетесь. Звездочки - не равно зубчатые колеса в планетарке) Мы намучились с малой точностью изготовления на эл.эрозии, а Вы лазером ))) Был собран опытный образец редуктора с незакаленными деталями, чисто проверить геометрию, отладить сборку. Так потом начальство этот редуктор сказало испытать в бою, как я не противился)) Помер за пару дней интенсивных нагрузок ))) Материал, термообработка и точности изготовления решают )
    • Snake 60
      @Тихоход  Ещё один вариант - изучать программирование и писать свою программу/макрос. Вот пример конфигуратора двери: https://www.youtube.com/watch?v=wv4HryWQBSk
    • mircomax81
      Посредством Diskcopy можно сделать адекватную копию на флоппи диск?
    • Andrey_kzn
      Да, ведь советовали автору вытащить жёсткий диск и сделать образ. Неужели самому не интересно, как устроен этот старый промкомпьютер? Там может стоять как жёсткий диск, так и CF-карта, или же Disc-on-chip или Disc-on-module.  Как-то очень давно, на подобном промышленном оборудовании (большая печатная машина) я не смог перенести  ПО с родной CF - карты на другую, такого же размера но другой фирмы. Была также станочная оболочка под досом.  Образ я делал Нортон гостом, развернул его на другую CF-карту без проблем. Машина загрузилась нормально и работала ровно 2 дня, на неродной CF-карте,  потом зависла, и отказалась загружаться. Пришлось вызывать сервисника. От него мы узнали, что нельзя просто так взять и заменить карту  - носитель системного ПО, на другую. А полезли мы туда, так как руководство захотело печатать отчёты по работе машины. В станочном ПО такая функция была. Вот только принтер надо было купить у фирмы - производителя этой самой машины. В попытках заставить работать другой принтер мы редактировали файл  AUTOEXEС.BAT, на предмет загрузки драйвера принтера, ничего не получилось, зато перестали открываться некоторые страницы станочного ПО.  Образ у нас был давно снят, и мы развернули его на другую карту памяти. Родную карту я трогать не стал (как чувствовал, что нельзя ). Сервисник восстановил ПО с архивной дискеты на родную карту памяти, и всё заработало. Дискеты с архивами ПО шли вместе с документацией к машине.  Там были дискеты с Досом, станочной оболочкой, параметрами приводов, программой ПЛК. Он же и предупредил нас о предельно аккуратном обращении с родной картой памяти, и посоветовал немедленно сделать образы с архивных дискет, что мы сразу и проделали.. Вот такой сюрприз от машины эпохи Дос.
    • Борман
    • gudstartup
      а ведь все работало...
×
×
  • Создать...