'java/swt'에 해당되는 글 3건

  1. 2010.06.29 [swt] - dynamic table 만들기
  2. 2010.06.29 [swt] - TreeTable TreeEditor
  3. 2010.06.29 [swt] Progress Bar(??)
매번 테이블을 만들기도 귀찮고.. 테이블을 동적으로 생성하게 만들어 놓으면 혹시나.. 서버에서 보내는 데이터를 토대로 테이블을 만들어 주면 좋겟다.. 라는 생각으로 만들게됨.

ps.
   prototype 으로 제작했기 때문에 추후 need가 생기면.. 참고로 정식 버전을 작성하면 될듯.

sample xml
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>

<tableconfig>
    <tables>
     <id>table_body_result</id>
     <fields>
      <text>no</text>
      <size></size>    
     </fields>
     <fields>
      <text>command</text>
      <size></size>    
     </fields>
     <fields>
      <text>data</text>
      <size></size>    
     </fields>
     <fields>
      <text>sw</text>
      <size></size>    
     </fields>
     <fields>
      <text>response</text>
      <size></size>    
     </fields>
    </tables> 
    <tables>
     <id>command_table</id>
     <fields>
      <text>no</text>
      <size></size>    
     </fields>
     <fields>
      <text>command</text>
      <size></size>    
     </fields>
     <fields>
      <text>data</text>
      <size></size>    
     </fields>
    </tables>        
</tableconfig>

sample.xml 과 매핑되는 Class 생성 (JAXB 사용)
- Fields.java
- Tableconfig.java
- Tables.java

XML Bind
package jface.common.table;

import javax.xml.bind.JAXBContext;
import javax.xml.bind.Unmarshaller;
import javax.xml.bind.UnmarshallerHandler;
import javax.xml.parsers.SAXParserFactory;

import org.xml.sax.InputSource;
import org.xml.sax.XMLReader;

import jface.common.constants.Constants;
import jface.common.table.generated.Tableconfig;

public class TableXmlBinding {

 public Tableconfig getTableconfig() {
 
  try {
   ClassLoader cl = this.getClass().getClassLoader();
   JAXBContext context   = JAXBContext.newInstance(Tableconfig.class); 
   Unmarshaller unmarshaller  = context.createUnmarshaller();
  
   // Unmarshaller에서 저수준 처리기를 얻는다.
   UnmarshallerHandler unmarshallerHandler = unmarshaller.getUnmarshallerHandler();

   // SAX 파서를 얻기 위해 JAXP를 사용한다.
   SAXParserFactory factory = SAXParserFactory.newInstance();

   // factory 옵션을 설정한 다음, 표준 JAXP 호출을 사용한다.
   factory.setNamespaceAware(true);

  
   XMLReader reader = factory.newSAXParser().getXMLReader();

   // unmarshallerHandler로 reader 처리기를 설정한다.
   reader.setContentHandler(unmarshallerHandler);

   // 이제 JAXB에서 가져온 언마샬링 처리기를 사용해 구문분석에 들어간다.
   reader.parse(new InputSource(cl.getResourceAsStream(Constants.tableconfig)));
  
   Tableconfig instance = (Tableconfig)unmarshallerHandler.getResult();

   return instance;
  } catch(Exception e) {
   e.printStackTrace();
   return null;
  }
 }
}

Table 생성
package jface.common.table;

import java.util.List;

import jface.common.table.generated.Fields;
import jface.common.table.generated.Tableconfig;
import jface.common.table.generated.Tables;

import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Table;
import org.eclipse.swt.widgets.TableColumn;

public class DefineTable {

 Table makedTable;
 
 public DefineTable(Composite parent, int style) { 
  makedTable = new Table(parent, style);
 }

 public void makeTable(String tableId) {
 
  TableXmlBinding bind = new TableXmlBinding();
 
  Tableconfig config = bind.getTableconfig();
 
  List tables = config.getTables();
 
  for(int i = 0;i<tables.size();i++) {
   Tables table = (Tables)tables.get(i);
  
   String id = table.getId();
  
   if(id.equals(tableId)) {
    List fields = table.getFields();
  
    for(int j = 0;j<fields.size();j++) {
     Fields field = (Fields)fields.get(j);
    
     TableColumn col = new TableColumn (makedTable, SWT.CENTER);
     col.setText(field.getText());
    
     if(field.getSize() > 0) {
      col.setWidth(field.getSize());
     }   
    
     col.pack();
    }
   } 
  }
 }

 public Table getMakedTable() {
  return makedTable;
 }

 public void setMakedTable(Table makedTable) {
  this.makedTable = makedTable;
 }
}

Launcher
{
   Group group = new Group(this, SWT.NONE);
   group.setBackground(Display.getDefault().getSystemColor (SWT.COLOR_BLACK));
  
   DefineTable defineTable  = new DefineTable(group, SWT.MULTI | SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL | SWT.READ_ONLY | SWT.FULL_SELECTION); 
   defineTable.makeTable(Constants.table_body_result);
  
   detailTable = defineTable.getMakedTable();
   detailTable.setLinesVisible (true);
   detailTable.setHeaderVisible (true);
  
   GridLayoutFactory.fillDefaults().generateLayout(group);
}

'java > swt' 카테고리의 다른 글

[swt] - TreeTable TreeEditor  (0) 2010.06.29
[swt] Progress Bar(??)  (0) 2010.06.29
Posted by 짱가쟁이
Tree Table의 모든 Cell을 수정하고 싶은데.. 이거는 뭐.. 구글링을 해도 전체 셀을 수정하는 sample은 눈을 씻고 찾아도 안나옴. 어쩔수 없이 그냥 이것저것 짬뽕해서 만듬..

문제점.
마우스 좌표값을 가지고 작성한 것이기 때문에 마우스 이벤트(SWT.MouseDown, SWT.MouseDoubleClick)를 받아야만 동작함.

사용법
- 첨부파일을 참고하삼.
- Tree Listener에 작성된 리스너 등록하면 땡.
- ex> tree.addListener(SWT.MouseDown, new TreeAllCellEditorListener(editor));


'java > swt' 카테고리의 다른 글

[swt] - dynamic table 만들기  (0) 2010.06.29
[swt] Progress Bar(??)  (0) 2010.06.29
Posted by 짱가쟁이
2010. 6. 29. 15:45
구글링을 하다가 우연한 기회에 재미있는 기능을 가진 화면을 보고 .. 나도 저거 만들고 싶다라는 생각에 무식하게 만든넘.

- 프로그래스 바 사용전


- 프로그래스 바 구동




1. 사용방법
// 프로그래스바 인스턴스 생성
ProgressBar bar = new ProgressBar();

/**
   * 지정된 shell 에 전체화면 프로그래스를 그려준다.
   * 프로그래스를 그리면서 시작 콜백 메소드를 호출하고 끝나면
   * 프로그래스를 종료하면서 종료 콜백 메소드를 호출한다.
   *
   * @param shell
   *     프로그래스를 보여줄 shell
   * @param instance
   *     콜백함수를 포함하는 instance.
   * @param startMethod
   *     프로그래스 시작과 동시에 호출될 콜백함수(ex>비지니스 처리용)
   * @param endMethod
   *     프로그래스바 종료와 동시에 호출된 콜백함수(ex> 비지니스 결과 처리용)
   */
  bar.start(shell, this, "startMethod", "endMehod");

/**
  * 프로그래스바 시작과 동시에 호출됨. (콜백함수)
  *
  * 프로그래스바가 동작하면서 수행되는 비지니스(로그인 등)를 처리한다.
  */
 public void startMethod() { 
  // 비지니스 처리

  // ex> 로그인, 조회, 삭제 등등
 }

/**
  * 프로그래스바가 종료되면서 호출됨.(콜백함수)
  *
  * 프로그래스바가 종료되면서(비지니스가 종료됨) 해당 결과를 처리하는 메소드
  */
 public void endMehod(){
  // 비지니스 처리 결과를 보여줌.
  // ex> 로그인 성공, 실패 등
 }


ps.
  - 테스트 성으로 만들었기때문에 추후 사용 시 좀더 보완을 해야 할듯.( 콜백함수 파라미터 등등)
  - 안정성 테스트도 충분히 해야 할듯.. (아직까지는 발견 못함)
  - 리팩토링도 해야 함.

'java > swt' 카테고리의 다른 글

[swt] - dynamic table 만들기  (0) 2010.06.29
[swt] - TreeTable TreeEditor  (0) 2010.06.29
Posted by 짱가쟁이
이전버튼 1 이전버튼