java 如何使用swt向表中添加一行
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/4665573/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
How to add a row to a table using swt
提问by Shekhar
I am learning swing and have one doubt regarding insertion of row to a table. My requirement is such that I have to add a new row by pressing a add button. But I am not able to proceed. please find the code below:
我正在学习 Swing 并且对在表中插入行有一个疑问。我的要求是我必须通过按添加按钮来添加一个新行。但我无法继续。请找到以下代码:
If some one know please help me....
如果有人知道请帮助我....
{public class TableShellExample {
Display d;
Shell s;
TableViewer tableViewer;
CellEditor cellEditor;
TableShellExample(){
d = new Display();
s = new Shell();
s.setSize(250,250);
s.setText("Table Shell Example");
GridLayout g1 = new GridLayout();
g1.numColumns = 3;
s.setLayout(g1);
final Table table = new Table(s,SWT.BORDER |SWT.CHECK|SWT.MULTI | SWT.FULL_SELECTION);
GridData gd = new GridData(GridData.FILL_BOTH);
gd.horizontalSpan = 3;
table.setLayoutData(gd);
table.setHeaderVisible(true);
TableColumn tc1 = new TableColumn(table, SWT.LEFT);
TableColumn tc2 = new TableColumn(table,SWT.CENTER);
TableColumn tc3 = new TableColumn(table,SWT.CENTER);
tc1.setText("FIRST NAME");
tc2.setText("LAST NAME");
tc3.setText("ADDRESS");
tc1.setWidth(70);
tc2.setWidth(70);
tc3.setWidth(80);
TableItem it1 = new TableItem(table,SWT.NONE);
it1.setText(new String[]{"aaa","bbb","pune"});
TableItem it2 = new TableItem(table,SWT.NONE);
it2.setText(new String[]{"aaa","bbb","pune"});
TableItem it3 = new TableItem(table,SWT.NONE);
it3.setText(new String[]{"aaa","bbb","pune"});
//tableViewer = new TableViewer(table);
//tableViewer.setColumnProperties(tc1);
//tableViewer.setContentProvider(new IContentProvider());
//tableViewer.setLabelProvider(new TableLabelProvider());
CellEditor[] editors = new CellEditor[2];
//editors[0] = new TextCellEditor(table);
//editors[1] = new TextCellEditor(table);
//tableViewer.setCellEditors(editors);
//tableViewer.setCellModifier(new ICellModifier());
final Text input = new Text(s, SWT.SINGLE | SWT.BORDER);
input.setTextLimit(5);
final Button searchBtn = new Button(s, SWT.BORDER | SWT.PUSH);
searchBtn.setText("Search");
searchBtn.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e){
TableItem[] tia = table.getItems();
for(int i=0;i<tia.length;i++){
tia[i].getText();
//tia[i].setBackground(new Color(d, 129, 178, 127));
//}
}
}
});
final Button addButton = new Button(s,SWT.BORDER | SWT.PUSH);
addButton.setText("Add Row");
addButton.setToolTipText("for addind a new row");
addButton.addListener(SWT.Selection, new Listener() {
public void handleEvent(Event arg0) {
TableEditor te = new TableEditor(table);
te.grabHorizontal = true;
te.grabVertical = true;
te.getItem();
TableItem ti = table.getItem(0);
ti.getText();
}
});
s.open();
while (!s.isDisposed()) {
if (!d.readAndDispatch())
d.sleep();
}
d.dispose();
}
public Vector rowToAdd() {
Vector defaultRow = new Vector();
defaultRow.add("column1");
defaultRow.add("column1");
return defaultRow;
}
public static void main(String[] argv){
new TableShellExample();
}
}
回答by Dylan
Here's a simple working example of how to add items to a table when a button is pressed:
这是一个简单的工作示例,说明如何在按下按钮时将项目添加到表格中:
public static void main(String[] args) {
Display display = new Display();
Shell shell = new Shell(display);
RowLayout layout = new RowLayout(SWT.VERTICAL);
layout.fill = true;
shell.setLayout(layout);
shell.setSize(200, 200);
final Table table = new Table(shell, SWT.BORDER | SWT.MULTI);
final Text text = new Text(shell, SWT.SINGLE | SWT.BORDER);
text.setText("blahblah text");
Button button = new Button(shell, SWT.PUSH);
button.setText("Push me");
// this is the code you want
button.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
TableItem item = new TableItem(table, SWT.NONE);
item.setText(text.getText());
}
});
for (int i = 0; i < 5; i++) {
TableItem item = new TableItem(table, SWT.NONE);
item.setText("*** Item " + i + "***");
}
shell.pack();
shell.open();
while (!shell.isDisposed()) {
if (!display.readAndDispatch())
display.sleep();
}
display.dispose();
}
If you must use the TableViewer system to add items, you need to modify whatever Object is passed into the viewer as its input. If you use an IStructuredContentProvider
as your viewer's content provider, the getElements
method returns an array that goes on to become your table's rows. To update it after a change to the input, just call viewer.refresh()
如果必须使用 TableViewer 系统添加项目,则需要修改作为输入传递给查看器的任何对象。如果您将IStructuredContentProvider
用作查看器的内容提供者,则该getElements
方法将返回一个数组,该数组将继续成为您表的行。要在更改输入后更新它,只需调用viewer.refresh()
回答by Chetan Bhagat
Easy way for learning:Text field record add in Table and selected row can display on text field using SWT
简单的学习方法:文本字段记录添加到表格中,选定的行可以使用 SWT 显示在文本字段上
package rcp_demo.Views;
import org.eclipse.swt.widgets.Composite;
public class TaskView extends ViewPart {
public static Table table;
public static TableViewer tableViewer;
public static TableItem std_item;
private Text txt_1,txt_2,txt_3;
Student stud=new Student();
List<Student> std=new ArrayList<Student>();
public TaskView() {
setTitleImage(SWTResourceManager.getImage("D:\Icon\Tasksview.png"));
}
@Override
public void createPartControl(Composite parent) {
parent.setLayout(null);
//Three Text
txt_1 = new Text(parent, SWT.BORDER);
txt_1.setBounds(21, 10, 76, 19);
txt_2 = new Text(parent, SWT.BORDER);
txt_2.setBounds(119, 10, 76, 19);
txt_3 = new Text(parent, SWT.BORDER);
txt_3.setBounds(222, 10, 76, 19);
tableViewer = new TableViewer(parent, SWT.BORDER | SWT.FULL_SELECTION);
table = tableViewer.getTable();
//how to pass values of a selected row from tableviewer to a text box in SWT
table.addListener(SWT.Selection, new Listener()
{
@Override
public void handleEvent(Event e) {
Table table = (Table) e.widget;
TableItem item = table.getItem(table.getSelectionIndex());
/* Fill the texts */
for (int col = 0; col < table.getColumnCount(); col++)
{
if(col==0)
{
txt_1.setText(item.getText(col));
}
else if(col==1)
{
txt_2.setText(item.getText(col));
}
else if(col==2)
{
txt_3.setText(item.getText(col));
}
}
}
});
table.setBounds(21, 47, 290, 213);
table.setHeaderVisible(true);
table.setLinesVisible(true);
//ADD Button
Button btnAdd = new Button(parent, SWT.NONE);
btnAdd.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
std.add(new Student(txt_1.getText(),txt_2.getText(),txt_3.getText()));
std_item=new TableItem(table, SWT.NONE);
std_item.setText(0,txt_1.getText());
std_item.setText(1,txt_2.getText());
std_item.setText(2,txt_3.getText());
}
});
btnAdd.setBounds(304, 10, 68, 23);
btnAdd.setText("Add");
//Dynamic add column Name using TableViewerColumn
String[] Col_names={"Stud_id","Stud_Name","Stud_Gender"};
for(int i=0;i<Col_names.length;i++)
{
TableViewerColumn tableViewerColumn = new TableViewerColumn(tableViewer, SWT.NONE);
TableColumn tblclmnNewColumn = tableViewerColumn.getColumn();
tblclmnNewColumn.setWidth(100);
tblclmnNewColumn.setText(Col_names[i]);
}
//(class: Student)static Item/Data Add
std.add(new Student("110","Deni","Male"));
std.add(new Student("111","Hina","Female"));
std.add(new Student("112","Jem","Male"));
for(Student s:std)
{
TableItem std_item=new TableItem(table, SWT.NONE);
std_item.setText(0,s.getStd_id());
std_item.setText(1,s.getStd_nm());
std_item.setText(2,s.getStd_gender());
}
}
public TableViewer getViewer() {
return tableViewer;
}
@Override
public void setFocus() {
tableViewer.getControl().setFocus();
}
}
Class name : Student.java
类名:Student.java
package rcp_demo.TableView;
public class Student {
private String std_id;
private String std_nm;
private String std_gender;
public Student() {
// TODO Auto-generated constructor stub
}
public Student(String sid,String snm,String sgender) {
std_id=sid;
std_nm=snm;
std_gender=sgender;
}
public String getStd_id() {
return std_id;
}
public void setStd_id(String std_id) {
this.std_id = std_id;
}
public String getStd_nm() {
return std_nm;
}
public void setStd_nm(String std_nm) {
this.std_nm = std_nm;
}
public String getStd_gender() {
return std_gender;
}
public void setStd_gender(String std_gender) {
this.std_gender = std_gender;
}
}