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

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


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

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



  • Сообщения

    • Guhl
      А вы мануалы синтека по макросам смотрели?   Должны быть @502 и @503
    • Artas28
      Почему не заносятся параметры при калибровке смещения щупа? Syntec 220MA-5 Калибровка смещения щупа по X и по Y (O9802) Выходные параметры Сохраняются следующие данные: #502 = Смещение щупа по X #503 = Смещение щупа по Y Сделал программку как в книжке. (М60 включение датчика). А на выходе всё по нулям.     Если я сделаю Векторная калибровка радиуса наконечника щупа (O9804), Вместо O9803, то обычные измерительные циклы будут работать?  И у меня нету эталонного кольца. По расфрезерованному отверстию детальки можно  делать калибровку??
    • gudstartup
      можно назначить любую папку для карты памяти программой настройки
    • maxx2000
      @artberesta 2 раздела справки https://tflexcad.ru/help/cad/17/?ysclid=m3bnjiod40554176555 делается как и в любой другой CAD, протягиванием эскиза по траектории с вычитанием материала. 3D Построения. Опорная геометрия-3D путь-Проекция 3D пути на грань или тело Твердотельное моделирование-По траектории
    • artberesta
      Спасибо большое всем ответившим на мой вопрос. Я изучаю эту программу , и в силу своего возраста она дается мне тяжело. (Хотя и на русском языке) Я легко могу это сделать в 3 программах blender, fusion, zbruch. Если вам будет не сложно , покажите на примере как это сделать в t flex. Возможно , когда я это сделаю и пойму , я обязательно выложу ответ на рутубе.  
    • gudstartup
      @Madmax70 900 -ые параметры опций запишите отдельно так как их только вручную вводить нужно. это связано с тем что при установке того или иного бита опций меняется конфигурация системы и оа требует перезагрузки чтобы привести в соответствие память (выделить или убрать несколько кб)и включить установленные функции а при изменении размера памяти программ эта область полностью очищается и т.д. можете конечно  попробовать их ввести через 232 предварительно установив параметры связи но и reader/puncher inerface  может быть опциональным поэтому придётся соответствующий 9хх.х установить иначе связь вовсе не заработает. сколько раз я не пробовал вводить ни разу нормально все не ввелись может чего не так делал. да и на 10 11 серии фанука ввод опций только ручной через ипл меню
    • ALEKS
      Презентация пройдёт в Герцлии 5 декабря и в Кейсарии 26 ноября сего года. Записывайтесь у секретаршы Симатрона.
    • Artas28
      Что означает запись, например @135:=@127+@802;//(X*COR*POS) @140:=@135-#10 @  - ?  := ?  
    • Artas28
      Добрый день! Есть у кого программа для Inspection Plus. Измерение отверстия или вала по трем точкам (O9823). Желательно для Syntec. А то в станок O9804 Векторная калибровка радиуса сферического наконечника щупа загрузили, а измерение отв. по 3-м точкам нет:((
    • Guest_by
      Попробуйте так:   CIMFIL/ON,GOHOME     XX=POSTF(2,1,1867,1)    FEDRAT / 123.000000,  MMPM        XX=POSTF(13)                 XX=POSTF(2,1,1867,0)            XHOME=POSTF(1,3,130)             YHOME=POSTF(1,3,131)   ZHOME=POSTF(1,3,132)   FHOME = 8000 POSTN/ALL           POSTN/OUT,7,1,26,ZHOME,F,FHOME POSTN/OUT,24,XHOME,25,YHOME CIMFIL/OFF
×
×
  • Создать...