2月1日Java班笔记作业
第一部分 :笔记 FileChooserDialog
1、 创建:int gtk_file_chooser_dialog_new(String title,int parentWindow, int action, String first_button_text):action可选值GTK_FILE_CHOOSER_ACTION_*:OPEN(打开文件)、SAVE(保存文件)、SELECT_FOLDER(选择文件夹)、CREATE_FOLDER(创建文件夹) 2、gtk_file_chooser_set_select_multiple是否允许多选(一般是设置上) gtk_file_chooser_set_current_name设置默认文件名 gtk_file_chooser_get_filename得到选择的文件名(单选) gtk_file_chooser_get_filenames得到选择的文件名(数组,多选) gtk_file_chooser_set_do_overwrite_confirmation选择已经存在的文件是否提示覆盖,一般是用于保存文件(在作业中有体现) 3、文件过滤器 gtk_file_filter_new:创建过滤器 gtk_file_filter_set_name设置显示的名字 gtk_file_filter_add_pattern添加过滤通配符:第二个参数格式“*.txt”,若是多个则多次执行这个函数 gtk_file_chooser_add_filter(int chooser,int filter)将过滤器添加到chooser中
TreeView Treemodal的作用是什么? 有点感觉了
TreeView是基于MVC模式设计的(关键点1); 也就是说需要有一个M,同时又一个V 把M和V联系起来的函数就叫做C,所以也可以改名为MVF。 C的作用可能是修改M的值,并实时显示在V中; 又或者通过修改V的数据,也能够实时反馈到M中; 所以猜测应该是MVC.png:
所以我们应该需要拥有数据:M(也就是通过liststore创建) 如何设置M是V的Model很重要,这样就实现了交互的过程,你变我显(你是M,我是V),你变我改(你是V,我是M) 当我们获得了数据就可以通过天猫的淘宝来卖了(这就是treeview) 我们也可以卸货和添货,这就是C了。
-
GTK.gtk columns 数据库的字段。
-
原来iter就是数据库的行 Columns的列
-
Int model是模型对象标识 int textview 是textview对象标识 int gridHouse是网格布局对象标识, 归根结底都得第一反应 过来这是一个对象标识,认清这些对象就可以琢磨这些方法之间的逻辑关系了。也就是说如果一个方法有某个对象标识那么肯定 就是说得事先创建这个对象或者通过反射机制获得。当然得看清是不是对象标识。通过对象标识认清逻辑关系(关键点2)又明白了一点 在所有的GTK.gtk_*_new的int对象都不是简单的整数,而是一个对象的标识,比如int column是列对象标识
莫名其妙的多了 tree_model的创建 , 应该加上一步 无论是gtk_tree_model_get_iter_first 还是gtk_tree_model_iter_next 又或者是gtk_tree_model_get_value 还是gtk_tree_model_set_value都涉及到 tree_model的对象标识,必须有tree_model对象标识, 联系到第一步然后把GtkListStore设置为GtkTreeView的Model ,也就是list_store其实就是tree_model ,因为 ListStore实现了TreeModel接口,所以有的操作以gtk_tree_model开头。一切就算说通了 关键点3
关键性一步 设置数据仓库的显示。 void gtk_tree_view_set_model(int tree_view, int model)把listmodel对象设置显示到tree_view上(关键点4 显示出来)。 认清五个对象标识: 1 list_store(tree_model)对象标识 2.tree_iter对象标识 3. Tree_view对象标识 4. treeViewColumn对象标识 5.cellRender对象标识
一个思路: 思路:首先创建GtkListStore,把要显示数据放到GtkListStore中,接着创建GtkTreeView,添加列配置列属性,然后把GtkListStore设置为GtkTreeView的Model,数据就可以显示出来。对数据添加、遍历等操作的时候都要使用迭代器(类似TextView中的Iter),int gtk_tree_iter_new()创建迭代器。 一般步骤: 1: 利用treeview创建界面,并创建所需的字段,达到View的目的 2: 根据字段数目,创建liststore的数据仓库,达到Model的目的 3: 利用iter对象标识,插入、遍历、删除、增加。 具体看 作业
另外treeview的行选择问题: 行选择要通过GtkSelection对象进行,int gtk_tree_view_get_selection(int tree_view)获得行选择对象 2、TreeView支持单选、多选等模式,默认是单选。void gtk_tree_selection_set_mode(int tree_selection,int type) 设置选择模式,第一个参数为GtkSelection;type可选值:GTK_SELECTION_SINGLE单选,GTK_SELECTION_MULTIPLE多选,其他不用管 3、int[] gtk_tree_view_get_selection_indices(int tree_view)获得选中行的序号,因为支持多选,所以返回数组 4、获得行选中改变信号,监听GtkSelection的"changed"信号。 5、获得双击事件,监听"button-press-event"信号,判断if(GTK.gdk_event_get_type(eventData)==GTK.GDK_2BUTTON_PRESS)得知是否是双击
ToolBar 1、int gtk_toolbar_new()创建工具栏容器 2、void gtk_toolbar_insert(int toolbar, int item,int pos)将工具栏项添加到工具栏,item:后面讲的工具栏项,pos插入的位置 3、工具栏项有按钮、下拉菜单按钮、分隔栏、开关等复杂内容,这里不介绍,只介绍简单常用的GtkToolButton。 int gtk_tool_button_new(int icon_widget,String label)创建GtkToolButton。icon_widget为显示的控件id,可以在按钮上显示其他控件,一般传0;label为标题。 void gtk_tool_button_set_stock_id(int button,String stock_id); 设置按钮上显示的图片。 响应工具栏按钮点击只要连接"clicked"信号即可
Calendar 1、日历Calendar int gtk_calendar_new() int gtk_calendar_get_year(int calendar)、int gtk_calendar_get_month(int calendar)、int gtk_calendar_get_day(int calendar)获得选择的年月日 信号:“day-selected”:选择日期发生变化;“day-selected-double-click"双击一个日期。 gtk_progress_bar_* 进度条 作业 gtk_switch_* 开关 作业 menu //分三步 //1创建单一菜单 //2创建一个菜单头 //3创建总的菜单条,把许多菜单头都挂到菜单条上 具体看toolbar的作业。
gtk_status_icon_* 右下角的系统图盘图标 作业
第二部分 :作业
文件选择器+工具栏
import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
/**
* @author 叶昭良
* @time 2015年2月1日下午5:56:29
* @version TestFileChooser V1.0 简易记事本 打开文件 保存文件 显示照片
* @version TestFileChooser V2.0 增加了打开对话框 并添加了对话框内部控件的事件
* @version TestFileChooser V3.0 增加了工具栏
*/
import com.rupeng.gtk4j.*;
public class TestFileChooser2
{
/**
* @param args
*/
static int window;
static int gridHouse;
static int scrolledBar;
static int textview;
static int btnApple;
static String[] selectFiles = null;
public static void main(String[] args)
{
// TODO 自动生成的方法存根
GTK.gtk_init();
window = GTK.gtk_window_new(GTK.GTK_WINDOW_TOPLEVEL);
GTK.gtk_widget_show(window);
GTK.g_signal_connect(window, "destroy", new IGCallBack()
{
@Override
public void execute(int instance, int eventData, Object object)
{
// TODO 自动生成的方法存根
GTK.gtk_main_quit();
}
}, null);
int btnApple = GTK.gtk_button_new_with_label("打开文件");
int btnBanana = GTK.gtk_button_new_with_label("保存文件");
int btnOrange = GTK.gtk_button_new_with_label("显示图片文件");
int btnPeal = GTK.gtk_button_new_with_label("打开对话框");
//创建布局
gridHouse= GTK.gtk_grid_new();
GTK.gtk_widget_show(gridHouse);
GTK.gtk_container_add(window, gridHouse);
//GTK.gtk_widget_set_size_request(window, 500, 500);
//添加控件到合租房
int start = 0;
createToolbar(gridHouse,start);
GTK.gtk_grid_attach(gridHouse, btnApple, 0, 2, 1, 1);
GTK.gtk_grid_attach(gridHouse, btnBanana, 1, 2, 1, 1);
GTK.gtk_grid_attach(gridHouse, btnOrange, 2, 2, 1, 1);
GTK.gtk_grid_attach(gridHouse, btnPeal, 3, 2, 1, 1);
createTextView(window,gridHouse,3);
//显示控件
GTK.gtk_widget_show(btnApple);
GTK.gtk_widget_show(btnBanana);
GTK.gtk_widget_show(btnOrange);
GTK.gtk_widget_show(btnPeal);
//添加按钮事件
insertButtonEvent(btnApple);
insertButtonSaveEvent(btnBanana);
insertButtonPictureEvent(btnOrange);
insertButtonDialogEvent(btnPeal);
//启动循环
GTK.gtk_main();
}
public static void saveFile(int textview)
{
int dlg1 = GTK.gtk_file_chooser_dialog_new("保存文件", 0, GTK.GTK_FILE_CHOOSER_ACTION_SAVE,"保存");
GTK.gtk_file_chooser_set_do_overwrite_confirmation(dlg1, true);
//String filename = GTK.gtk_file_chooser_get_filename(dlg1);
System.out.println("已进入save");
//SaveOneFile(filename,textview);
int ret = GTK.gtk_dialog_run(dlg1);
if(ret == GTK.GTK_RESPONSE_CANCEL)
{
GTK.gtk_widget_destroy(dlg1);
}else
{
String filename = GTK.gtk_file_chooser_get_filename(dlg1);
System.out.println(filename);
SaveOneFile(filename,textview);
GTK.gtk_widget_destroy(dlg1);
}
}
public static String[] selectFile()
{
int dlg = GTK.gtk_file_chooser_dialog_new("打开文件", 0, GTK.GTK_FILE_CHOOSER_ACTION_OPEN,"打开");
GTK.gtk_file_chooser_set_select_multiple(dlg, true);
//创建过滤器
int filter = GTK.gtk_file_filter_new();
GTK.gtk_file_filter_add_pattern(filter, "*.txt");
GTK.gtk_file_filter_add_pattern(filter, "*.java");
GTK.gtk_file_filter_set_name(filter, "文本文件");
GTK.gtk_file_chooser_add_filter(dlg, filter);
int ret = GTK.gtk_dialog_run(dlg);
String[] filenames = null;
if(ret == GTK.GTK_RESPONSE_OK)
{
filenames = GTK.gtk_file_chooser_get_filenames(dlg);
for(int i = 0 ; i< filenames.length ; i++)
{
System.out.println("选中文件名"+i+": "+filenames[i]);
}
GTK.gtk_widget_destroy(dlg);
}else
{
GTK.gtk_widget_destroy(dlg);
}
return filenames;
}
public static void selectFile(int gridHouse,int start)
{
int dlg = GTK.gtk_file_chooser_dialog_new("打开文件", 0, GTK.GTK_FILE_CHOOSER_ACTION_OPEN,"打开");
GTK.gtk_file_chooser_set_select_multiple(dlg, true);
//创建过滤器
int filter = GTK.gtk_file_filter_new();
GTK.gtk_file_filter_add_pattern(filter, "*.jpg");
GTK.gtk_file_filter_add_pattern(filter, "*.png");
GTK.gtk_file_filter_add_pattern(filter, "*.gif");
GTK.gtk_file_filter_set_name(filter, "图片文件");
GTK.gtk_file_chooser_add_filter(dlg, filter);
int ret = GTK.gtk_dialog_run(dlg);
String[] filenames = null;
if(ret == GTK.GTK_RESPONSE_OK)
{
filenames = GTK.gtk_file_chooser_get_filenames(dlg);
for(int i = 0 ; i< filenames.length ; i++)
{
System.out.println("选中文件名"+i+": "+filenames[i]);
int temp = GTK.gtk_image_new_from_file(filenames[i]);
GTK.gtk_grid_attach(gridHouse, temp, i, start, 3, 1);
GTK.gtk_widget_show(temp);
}
GTK.gtk_widget_destroy(dlg);
}else
{
GTK.gtk_widget_destroy(dlg);
}
}
public static void showAllFiles(String[] filenames,int textview)
{
for(int i = 0 ; i < filenames.length; i++)
{
showOneFile(filenames[i],textview);
}
}
/* public static void showOneFile(String filename, int textview)
{
try
(
InputStream fis = new FileInputStream(filename);
BufferedInputStream bis = new BufferedInputStream(fis);
)
{
int len = 0;
byte[] fileToFile = new byte[512*1024];
while((len = bis.read(fileToFile))!= -1) // -1读取完毕
{
//InsertStringToTextViewFunction(textview,fileToFile.toString());
InsertStringToTextViewFunction(textview,new String(fileToFile,"gb2312"));
}
}
catch(IOException e)
{
System.out.println("文件读入异常");
}
}*/
public static void showOneFile(String filename, int textview)
{
try
(
InputStream is = new FileInputStream(filename);
InputStreamReader osr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(osr);
)
{
String temp= filename.substring(filename.lastIndexOf('\\')+1);
System.out.println(temp);
InsertStringToTextViewFunction(textview,"******************\n当期文件为"+filename+"\n******************\n\n"+temp+" 文件内容如下:\n+---------------------------------------------------------------------------+\n");
String content = null;
while((content = br.readLine())!=null) // -1读取完毕
{
//InsertStringToTextViewFunction(textview,fileToFile.toString());
InsertStringToTextViewFunction(textview,new String(content));
}
InsertStringToTextViewFunction(textview,"\n+---------------------------------------------------------------------------+\n******************\n文件"+filename+"读取结束\n******************\n");
}
catch(IOException e)
{
System.out.println("文件读入异常");
}
}
public static void SaveOneFile(String filename, int textview)
{
try
(
OutputStream os = new FileOutputStream(filename);
OutputStreamWriter osw = new OutputStreamWriter(os);
BufferedWriter bw = new BufferedWriter(osw);
)
{
String temp= filename.substring(filename.lastIndexOf('\\')+1);
System.out.println(temp);
int textBuffer = GTK.gtk_text_view_get_buffer(textview);
int textIter = GTK.gtk_text_iter_new(); //这是一个空的iter,需要用textBuffer进行赋值
GTK.gtk_text_buffer_get_end_iter(textBuffer, textIter);// 或者textview的textBuffer的末尾!
String tempText = GTK.gtk_text_buffer_get_text(textBuffer);
//while(tempText != null) // -1读取完毕
{
//InsertStringToTextViewFunction(textview,fileToFile.toString());
bw.write(tempText);
bw.newLine();
// GTK.gtk_text_iter_backward_char(textIter);
// tempText = GTK.gtk_text_buffer_get_text(textBuffer);
}
}
catch(IOException e)
{
System.out.println("文件读入异常");
}
}
public static void createTextView(int window, int gridHouse,int start)
{
textview = GTK.gtk_text_view_new();
createScrolledBar(window,textview,gridHouse,start);
//GTK.gtk_text_view_set_wrap_mode(textview,GTK.GTK_WRAP_WORD);
GTK.gtk_text_view_set_wrap_mode(textview,GTK.GTK_WRAP_WORD_CHAR);
GTK.gtk_widget_show(textview);
}
public static void createScrolledBar(int window, int textview, int gridHouse,int start)
{
scrolledBar = GTK.gtk_scrolled_window_new();
GTK.gtk_widget_show(scrolledBar);
GTK.gtk_widget_set_size_request(scrolledBar, 200, 200);
GTK.gtk_grid_attach(gridHouse, scrolledBar, 0, start, 1, 1);
GTK.gtk_container_add(scrolledBar, textview);
}
//封装了 TextView的迭代器操作。。。
/**
*
* @param textview 多行文本TextView的标识
* @param temp 插入TextView 的字符串。
*/
public static void InsertStringToTextViewFunction(int textview,String temp)
{
//TextIter是一个TextView的迭代器。
int textBuffer = GTK.gtk_text_view_get_buffer(textview);
int textIter = GTK.gtk_text_iter_new(); //这是一个空的iter,需要用textBuffer进行赋值
//GTK.gtk_text_iter_forward_to_end(textIter);
GTK.gtk_text_buffer_get_end_iter(textBuffer, textIter);// 或者textview的textBuffer的末尾!
GTK.gtk_text_buffer_insert(textBuffer, textIter, temp);
//GTK.gtk_text_buffer_g
GTK.gtk_text_iter_free(textIter);
}
/**
*
* @param textview TextView的多行文本的标识
* @return 返回的字符串
*/
public static String GetStringFromTextViewFunction(int textview)
{
//TextIter是一个TextView的迭代器。
int textBuffer = GTK.gtk_text_view_get_buffer(textview);
int textIter = GTK.gtk_text_iter_new(); //这是一个空的iter,需要用textBuffer进行赋值
GTK.gtk_text_buffer_get_end_iter(textBuffer, textIter);// 或者textview的textBuffer的末尾!
String temp = GTK.gtk_text_buffer_get_text(textBuffer);
String[] splitArray = temp.split("\\n");
temp = splitArray[splitArray.length-1];
System.out.println(temp);
return temp;
//GTK.gtk_text_buffer_g
//GTK.gtk_text_iter_free(textIter);
}
public static boolean showInfo( String message,String title)
{
int msgDlg = GTK.gtk_message_dialog_new(0, GTK.GTK_DIALOG_DESTROY_WITH_PARENT|
GTK.GTK_DIALOG_MODAL,GTK.GTK_MESSAGE_INFO, GTK.GTK_BUTTONS_OK,message);
GTK.gtk_window_set_title(msgDlg, title);
int ret = GTK.gtk_dialog_run(msgDlg);
GTK.gtk_widget_destroy(msgDlg);
return ret == GTK.GTK_RESPONSE_OK;
}
public static void createDialog()
{
int dialogApple = GTK.gtk_dialog_new();
int btnApple = GTK.gtk_button_new_with_label("幽灵点击");
//action_are获得一个 类似box,grid的作用,可以添加容器
int areaDialog = GTK.gtk_dialog_get_action_area(dialogApple);
GTK.gtk_widget_show(btnApple);
GTK.gtk_container_add(areaDialog, btnApple);
GTK.g_signal_connect(btnApple, "clicked", new IGCallBack()
{
@Override
public void execute(int instance, int eventData, Object object)
{
// TODO Auto-generated method stub
showInfo("欣然是不是很美","那可不");
}
}, null);
int ret = GTK.gtk_dialog_run(dialogApple);
if(ret == GTK.GTK_RESPONSE_OK)
{
System.out.println("再见");
GTK.gtk_widget_destroy(dialogApple);
}
GTK.gtk_widget_destroy(dialogApple);
}
// ********************事件整体处理 区域***************************
/**
*
* @param btnSin 按钮的标识
* @param tv1 textview的标识
*/
public static void insertButtonEvent(final int btnSin,final int tv1)
{
GTK.g_signal_connect(btnSin, "clicked",new IGCallBack()
{
@Override
public void execute(int instance, int eventData, Object object)
{
// TODO 自动生成的方法存根
//double sbValue = GTK.gtk_spin_button_get_value(spinbox);
String temp = GTK.gtk_button_get_label(btnSin);
InsertStringToTextViewFunction(tv1,temp);
//isEnter = false;
}
}, null);
}
public static void insertButtonEvent(final int btnSin)
{
GTK.g_signal_connect(btnSin, "clicked",new IGCallBack()
{
@Override
public void execute(int instance, int eventData, Object object)
{
// TODO 自动生成的方法存根
//double sbValue = GTK.gtk_spin_button_get_value(spinbox);
GTK.gtk_widget_show(scrolledBar);
GTK.gtk_widget_set_size_request(scrolledBar, 400, 400);
String temp = GTK.gtk_button_get_label(btnSin);
selectFiles = selectFile() ;
//isEnter = false;
showAllFiles(selectFiles, textview);
}
}, null);
}
public static void insertButtonSaveEvent(final int btnSin)
{
GTK.g_signal_connect(btnSin, "clicked",new IGCallBack()
{
@Override
public void execute(int instance, int eventData, Object object)
{
// TODO 自动生成的方法存根
//double sbValue = GTK.gtk_spin_button_get_value(spinbox);
saveFile(textview);
}
}, null);
}
public static void insertButtonPictureEvent(final int btnSin)
{
GTK.g_signal_connect(btnSin, "clicked",new IGCallBack()
{
@Override
public void execute(int instance, int eventData, Object object)
{
// TODO 自动生成的方法存根
//double sbValue = GTK.gtk_spin_button_get_value(spinbox);
GTK.gtk_widget_hide(scrolledBar);
selectFile(gridHouse, 2) ;
}
}, null);
}
public static void insertButtonDialogEvent(final int btnSin)
{
GTK.g_signal_connect(btnSin, "clicked",new IGCallBack()
{
@Override
public void execute(int instance, int eventData, Object object)
{
// TODO 自动生成的方法存根
//double sbValue = GTK.gtk_spin_button_get_value(spinbox);
createDialog();
}
}, null);
}
public static void createToolbar(int gridHouse,int start)
{
//创建工具栏容器
int tbApple = GTK.gtk_toolbar_new();
GTK.gtk_widget_show(tbApple);
GTK.gtk_widget_set_size_request(tbApple, 300, 20);
GTK.gtk_grid_attach(gridHouse, tbApple, 0, start, 1, 1);
int btnNew = GTK.gtk_tool_button_new(0, "新建");
GTK.gtk_tool_button_set_stock_id(btnNew, GTK.GTK_STOCK_NEW);
GTK.gtk_widget_show(btnNew);
GTK.gtk_toolbar_insert(tbApple, btnNew, 0);
final int btnOpen = GTK.gtk_tool_button_new(0, "打开");
GTK.gtk_tool_button_set_stock_id(btnOpen, GTK.GTK_STOCK_OPEN);
GTK.gtk_widget_show(btnOpen);
GTK.gtk_toolbar_insert(tbApple, btnOpen, 1);
GTK.g_signal_connect(btnOpen, "clicked",new IGCallBack()
{
@Override
public void execute(int instance, int eventData, Object object)
{
System.out.println("hello");
// TODO 自动生成的方法存根
//double sbValue = GTK.gtk_spin_button_get_value(spinbox);
GTK.gtk_widget_show(scrolledBar);
GTK.gtk_widget_set_size_request(scrolledBar, 400, 400);
//String temp = GTK.gtk_button_get_label(btnOpen);
selectFiles = selectFile() ;
//isEnter = false;
showAllFiles(selectFiles, textview);
}
}, null);
int btnSave = GTK.gtk_tool_button_new(0, "保存");
GTK.gtk_tool_button_set_stock_id(btnSave, GTK.GTK_STOCK_SAVE);
GTK.gtk_widget_show(btnSave);
GTK.gtk_toolbar_insert(tbApple, btnSave, 2);
GTK.g_signal_connect(btnSave, "clicked",new IGCallBack()
{
@Override
public void execute(int instance, int eventData, Object object)
{
// TODO 自动生成的方法存根
//double sbValue = GTK.gtk_spin_button_get_value(spinbox);
saveFile(textview);
}
}, null);
}
}
treeview 简单的增加用户,调整treeview的样式,未实现删除
import com.rupeng.gtk4j.GTK;
import com.rupeng.gtk4j.IGCallBack;
/**
* @author 叶昭良
* @time 2015年2月2日下午6:02:11
* @version TestGTKTreeView V1.0 一个基本的treeview的使用流程 + 字段创建+记录添加
* @version TestGTKTreeView V2.0 增加了遍历处理 以及显示某行某列的信息
* @version TestGTKTreeView V3.0 增加了”列控制“ !!treeview 的某列可显示,可拉伸 ,可排序,可调整
* 列控制只是改变treeview的表现,而不会改变liststore的model的内部值
* @version TestGTKTreeView V4.0 增加了添加记录的功能
* @version TestGTKTreeView V5.0 增加了getSelection 进行行操作, 并未取出数据,也并未删除数据
*/
public class TestGTKTreeView
{
/**
* @param args
*/
static int window;
static int gridHouse;
static int liststore;
static int listiter;
static boolean columnVisible = false; //用static 变量 不要用final变量。
static boolean columnResize = true; //用static 变量 不要用final变量。
static boolean columnRecordable = true; // 设置可拉动
static int entryID;
static int entryName;
static int entryAge;
static int treeViewApple;
public static void main(String[] args)
{
// TODO Auto-generated method stub
GTK.gtk_init();
window = GTK.gtk_window_new(GTK.GTK_WINDOW_TOPLEVEL);
GTK.gtk_widget_show(window);
GTK.gtk_window_set_title(window, "TreeView TestVersion");
GTK.g_signal_connect(window, "destroy", new IGCallBack()
{
@Override
public void execute(int instance, int eventData, Object object)
{
// TODO Auto-generated method stub
GTK.gtk_main_quit();
}
}, null);
int start = 0;
//创建并添加布局
gridHouse = GTK.gtk_grid_new();
GTK.gtk_container_add(window, gridHouse);
GTK.gtk_widget_show(gridHouse);
//3 treeview 是一个界面,相当于是一个淘宝前台, V V的作用
treeViewApple = GTK.gtk_tree_view_new();
//4 建立字段 比较费劲
//4.1创建字段
int columnID = GTK.gtk_tree_view_column_new_with_attributes("ID", GTK.gtk_cell_renderer_text_new(), 0);
//4.2添加字段
GTK.gtk_tree_view_append_column(treeViewApple, columnID);
//4.3创建字段
int columnName = GTK.gtk_tree_view_column_new_with_attributes("Names",GTK.gtk_cell_renderer_text_new(),1);
//4.4添加字段
GTK.gtk_tree_view_append_column(treeViewApple,columnName);
//4.5创建字段
int columnAge = GTK.gtk_tree_view_column_new_with_attributes("Ages",GTK.gtk_cell_renderer_text_new(),2);
GTK.gtk_tree_view_append_column(treeViewApple,columnAge);
//创建控件
//1 list_store 是一个数据结构库,相当于一个仓库 M model的作用
liststore = GTK.gtk_list_store_new(3); //3代表三个字段:ID Names Age
// GTK.gtk_list_store_append(list_store, iter);
//2 list_iter,list_iter是一个内部的数据迭代的控制过程,不需要显示 C的作用,控制
listiter = GTK.gtk_tree_iter_new();
//5 第五步 把 iter和listStore联系起来
//GTK.gtk_text_buffer_get_end_iter 类似于treeview的buffer和iter联系起来
// 以后就可以通过GTK.gtk_text_buffer_insert默认是一个一个iter的执行。
GTK.gtk_list_store_append(liststore, listiter); //指针开始指到第一个位置
// 6 逐个iter添加数据到liststore当中:每个iter的意思,就是逐行或者逐个记录。
GTK.gtk_list_store_set_value(liststore, listiter, 0, "001");
GTK.gtk_list_store_set_value(liststore, listiter, 1, "YinMuHuaDao");
GTK.gtk_list_store_set_value(liststore, listiter, 2, "35");
GTK.gtk_list_store_append(liststore, listiter); //如果不加入,指针不下移,只会覆盖掉前面的数据
GTK.gtk_list_store_set_value(liststore, listiter, 0, "002");
GTK.gtk_list_store_set_value(liststore, listiter, 1, "Taiyanghua");
GTK.gtk_list_store_set_value(liststore, listiter, 2, "29");
GTK.gtk_list_store_append(liststore, listiter);
GTK.gtk_list_store_set_value(liststore, listiter, 0 ,"003");
GTK.gtk_list_store_set_value(liststore, listiter, 1 ,"Xiaojun");
GTK.gtk_list_store_set_value(liststore, listiter, 2 ,"10");
// 之所以添加9次是因为 3个字段*3条记录 == 9
//7 使用完iter之后一定要记得 关掉它
GTK.gtk_tree_iter_free(listiter);
//8 关键的一步,把数字显示出来
GTK.gtk_tree_view_set_model(treeViewApple, liststore);
//并同时把它显示出来,前台必须显示
GTK.gtk_widget_show(treeViewApple);
//最后添加到合租房中
//GTK.gtk_grid_attach(gridHouse, treeViewApple, 0, 1, 3, 3);
start = 1;
createScrolledBar(gridHouse,start,treeViewApple);
start = 4;
createPrintButton(gridHouse,start);
createLabel(gridHouse, start, "ID");
//createEntry(entryID, gridHouse, start);
entryID = GTK.gtk_entry_new();
GTK.gtk_entry_set_max_length(entryID, 30);
GTK.gtk_widget_show(entryID);
GTK.gtk_grid_attach(gridHouse, entryID, 5, start, 1, 1);
start = 5;
createShowButton(gridHouse,start,1,1);
createLabel(gridHouse, start, "名字");
//createEntry(entryName, gridHouse, start);
entryName = GTK.gtk_entry_new();
GTK.gtk_entry_set_max_length(entryName, 30);
GTK.gtk_widget_show(entryName);
GTK.gtk_grid_attach(gridHouse, entryName, 5, start, 1, 1);
start = 6 ;
createHideColumnButton(gridHouse,treeViewApple,start,1);
createLabel(gridHouse, start, "年龄");
//createEntry(entryAge, gridHouse, start);
entryAge = GTK.gtk_entry_new();
GTK.gtk_entry_set_max_length(entryAge, 30);
GTK.gtk_widget_show(entryAge);
GTK.gtk_grid_attach(gridHouse, entryAge, 5, start, 1, 1);
start = 7 ;
createResizeColumnButton(gridHouse,treeViewApple,start,1);
createInsertRecordButton(gridHouse,start);
start = 8;
createRecoredColumnButton(gridHouse,treeViewApple,start,1);
start = 9;
createSortColumnButton(gridHouse,treeViewApple,start,1);
//加入行选择事件
rowSelection();
//3
//添加控件
//显示控件
//GTK.gtk_widget_show(liststore);
//启动循环
GTK.gtk_main();
}
/**
*
* @param gridHouse 网格对象布局的标识
* @param start 网格布局的所处行数
* @param treeview treeview的对象标识
*/
public static void createScrolledBar(int gridHouse,int start,int treeview)
{
int scrollbar = GTK.gtk_scrolled_window_new();
GTK.gtk_container_add(scrollbar, treeview);
GTK.gtk_widget_set_size_request(scrollbar, 200, 200);
GTK.gtk_widget_show(scrollbar);
GTK.gtk_grid_attach(gridHouse, scrollbar, 0, start, 3, 3);
}
/**
*
* @param treeView treeView对象标识
* @param nth_columns 添加字段到第几列
* @param column_name 字段的名字
* @note 一般是一次创建记录
*/
public static void createColumn(int treeView, int nth_columns, String column_name)
{
int temp_column = GTK.gtk_tree_view_column_new_with_attributes(column_name, GTK.gtk_cell_renderer_text_new(), nth_columns);
GTK.gtk_tree_view_append_column(treeView, temp_column);
}
/**
*
* @param ID 记录的ID号
* @param Names 记录的名字
* @param Age 记录的年龄
* @note 需要多次创建记录
*/
public static void createRecord(String ID, String Names, String Age,int listiter)
{
GTK.gtk_list_store_append(liststore, listiter); //指针下一继续添加的作用
//append两个作用 1:添加 2:iter指针下移
GTK.gtk_list_store_set_value(liststore, listiter, 0, ID);
GTK.gtk_list_store_set_value(liststore, listiter, 1, Names);
GTK.gtk_list_store_set_value(liststore, listiter, 2, Age);
}
public static void printRecord(int liststore)
{
//必须新建,不能利用原先的listiter,哪边需要用控制,就需要建一个控件。!!!否则报错!!不能用全局的 listiter
int iter = GTK.gtk_tree_iter_new();
/* if(GTK.gtk_tree_model_get_iter_first(liststore, listiter))
{
do
{
String ID = GTK.gtk_tree_model_get_value(liststore, listiter, 0);
String Names = GTK.gtk_tree_model_get_value(liststore, listiter, 1);
String Ages = GTK.gtk_tree_model_get_value(liststore, listiter, 2);
//showInfo("这个员工的ID是"+ID+",他的名字是"+Names+",并且它的年龄是"+Ages,"显示员工信息");
System.out.println("这个员工的ID是"+ID+",他的名字是"+Names+",并且它的年龄是"+Ages);
}while(GTK.gtk_tree_model_iter_next(liststore,listiter));
}else
{
System.out.println("表中无数据");
}*/
// 减少代码的深度。
if(!GTK.gtk_tree_model_get_iter_first(liststore, iter))
{
System.out.println("treeview没有数据 请添加记录");
return;
}
do
{
String ID = GTK.gtk_tree_model_get_value(liststore, iter, 0);
String Names = GTK.gtk_tree_model_get_value(liststore, iter, 1);
String Ages = GTK.gtk_tree_model_get_value(liststore, iter, 2);
//showInfo("这个员工的ID是"+ID+",他的名字是"+Names+",并且它的年龄是"+Ages,"显示员工信息");
System.out.println("这个员工的ID是"+ID+",他的名字是"+Names+",并且它的年龄是"+Ages);
}while(GTK.gtk_tree_model_iter_next(liststore,iter));
GTK.gtk_tree_iter_free(iter);//释放了 还是有错误。。。
}
public static void showInfo( String message,String title)
{
int msgDlg = GTK.gtk_message_dialog_new(0, GTK.GTK_DIALOG_DESTROY_WITH_PARENT|
GTK.GTK_DIALOG_MODAL,GTK.GTK_MESSAGE_INFO, GTK.GTK_BUTTONS_OK,message);
GTK.gtk_window_set_title(msgDlg, title);
int ret = GTK.gtk_dialog_run(msgDlg);
if( ret == GTK.GTK_RESPONSE_OK)
{
GTK.gtk_widget_destroy(msgDlg);
}else
{
GTK.gtk_widget_destroy(msgDlg);
}
}
public static boolean showWarning( String message,String title)
{
int msgDlg = GTK.gtk_message_dialog_new(0, GTK.GTK_DIALOG_DESTROY_WITH_PARENT|
GTK.GTK_DIALOG_MODAL,GTK.GTK_MESSAGE_WARNING, GTK.GTK_BUTTONS_OK,message);
GTK.gtk_window_set_title(msgDlg, title);
int ret = GTK.gtk_dialog_run(msgDlg);
GTK.gtk_widget_destroy(msgDlg);
return ret == GTK.GTK_RESPONSE_OK;
}
public static void createPrintButton(int gridHouse,int start)
{
int btnApple = GTK.gtk_button_new_with_label("遍历");
GTK.gtk_widget_show(btnApple);
GTK.gtk_grid_attach(gridHouse, btnApple, 0, start, 1, 1);
insertButtonEvent(btnApple);
}
public static void createShowButton(int gridHouse,int start,int row, int column)
{
int btnApple = GTK.gtk_button_new_with_label("获取表第"+row+"行"+"第"+column+"列");
GTK.gtk_widget_show(btnApple);
GTK.gtk_grid_attach(gridHouse, btnApple, 0, start, 1, 1);
insertShowEvent(btnApple,row,column);
}
public static void createHideColumnButton(int gridHouse,int treeViewApple,int start,int nthcolumn)
{
int btnApple = GTK.gtk_button_new_with_label("隐藏|显示第"+nthcolumn+"列");
GTK.gtk_widget_show(btnApple);
GTK.gtk_grid_attach(gridHouse, btnApple, 0, start, 1, 1);
insertHideEvent(treeViewApple, btnApple, nthcolumn);
}
public static void createResizeColumnButton(int gridHouse,int treeViewApple,int start,int nthcolumn)
{
int btnApple = GTK.gtk_button_new_with_label("赋予第"+nthcolumn+"列可调整大小的权限");
GTK.gtk_widget_show(btnApple);
GTK.gtk_grid_attach(gridHouse, btnApple, 0, start, 1, 1);
insertResizeEvent(treeViewApple, btnApple, nthcolumn);
}
public static void createRecoredColumnButton(int gridHouse,int treeViewApple,int start,int nthcolumn)
{
int btnApple = GTK.gtk_button_new_with_label("赋予第"+nthcolumn+"列可移动的权限");
GTK.gtk_widget_show(btnApple);
GTK.gtk_grid_attach(gridHouse, btnApple, 0, start, 1, 1);
insertRecordableEvent(treeViewApple, btnApple, nthcolumn);
}
public static void createSortColumnButton(int gridHouse,int treeViewApple,int start,int nthcolumn)
{
int btnApple = GTK.gtk_button_new_with_label("赋予第"+nthcolumn+"列可排序的权限");
GTK.gtk_widget_show(btnApple);
GTK.gtk_grid_attach(gridHouse, btnApple, 0, start, 1, 1);
insertSortEvent(treeViewApple, btnApple, nthcolumn);
}
public static void createInsertRecordButton(int gridHouse,int start)
{
int btnApple = GTK.gtk_button_new_with_label("插入数据");
GTK.gtk_widget_show(btnApple);
GTK.gtk_grid_attach(gridHouse, btnApple, 5, start, 1, 1);
insertRecordEvent(btnApple);
}
public static void createLabel(int gridHouse, int start,String labelName)
{
int labelApple = GTK.gtk_label_new(labelName);
GTK.gtk_widget_show(labelApple);
GTK.gtk_grid_attach(gridHouse, labelApple, 4, start, 1, 1);
}
public static void createEntry(int entryApple,int gridHouse, int start)
{
entryApple = GTK.gtk_entry_new();
GTK.gtk_entry_set_max_length(entryApple, 30);
GTK.gtk_widget_show(entryApple);
GTK.gtk_grid_attach(gridHouse, entryApple, 5, start, 1, 1);
}
public static void insertButtonEvent(final int btnSin)
{
GTK.g_signal_connect(btnSin, "clicked",new IGCallBack()
{
@Override
public void execute(int instance, int eventData, Object object)
{
// TODO 自动生成的方法存根
//double sbValue = GTK.gtk_spin_button_get_value(spinbox);
printRecord(liststore);
}
}, null);
}
public static void insertShowEvent(final int btnSin,final int row, final int column)
{
GTK.g_signal_connect(btnSin, "clicked",new IGCallBack()
{
@Override
public void execute(int instance, int eventData, Object object)
{
// TODO 自动生成的方法存根
//double sbValue = GTK.gtk_spin_button_get_value(spinbox);
showColumnRow(row,column);
}
}, null);
}
public static void insertHideEvent(final int treeViewApple,final int btnSin, final int nthcolumn)
{
//final boolean columnVisible = true;
GTK.g_signal_connect(btnSin, "clicked",new IGCallBack()
{
@Override
public void execute(int instance, int eventData, Object object)
{
// TODO 自动生成的方法存根
//double sbValue = GTK.gtk_spin_button_get_value(spinbox);
tree_view_column_set_hide(treeViewApple,nthcolumn,columnVisible);
columnVisible = !columnVisible;
}
}, null);
}
public static void insertResizeEvent(final int treeViewApple,final int btnSin, final int nthcolumn)
{
//final boolean columnVisible = true;
GTK.g_signal_connect(btnSin, "clicked",new IGCallBack()
{
@Override
public void execute(int instance, int eventData, Object object)
{
// TODO 自动生成的方法存根
//double sbValue = GTK.gtk_spin_button_get_value(spinbox);
tree_view_column_resize(treeViewApple,nthcolumn,columnResize);
columnResize = !columnResize;
}
}, null);
}
public static void insertRecordableEvent(final int treeViewApple,final int btnSin, final int nthcolumn)
{
//final boolean columnVisible = true;
GTK.g_signal_connect(btnSin, "clicked",new IGCallBack()
{
@Override
public void execute(int instance, int eventData, Object object)
{
// TODO 自动生成的方法存根
//double sbValue = GTK.gtk_spin_button_get_value(spinbox);
tree_view_column_recordabel(treeViewApple,nthcolumn,columnRecordable);
columnRecordable = !columnRecordable;
}
}, null);
}
public static void insertSortEvent(final int treeViewApple,final int btnSin, final int nthcolumn)
{
//final boolean columnVisible = true;
GTK.g_signal_connect(btnSin, "clicked",new IGCallBack()
{
@Override
public void execute(int instance, int eventData, Object object)
{
// TODO 自动生成的方法存根
//double sbValue = GTK.gtk_spin_button_get_value(spinbox);
tree_view_column_sort(treeViewApple,nthcolumn,1);
//columnRecordable = !columnRecordable;
}
}, null);
}
public static void insertRecordEvent(final int btnSin)
{
//final boolean columnVisible = true;
GTK.g_signal_connect(btnSin, "clicked",new IGCallBack()
{
@Override
public void execute(int instance, int eventData, Object object)
{
String ID = GTK.gtk_entry_get_text(entryID);
System.out.println(ID);
if(ID.equalsIgnoreCase(""))
{
showWarning("ID为空,请重新输入","警告");
return;
}
String Name = GTK.gtk_entry_get_text(entryName);
if(Name.equalsIgnoreCase(""))
{
showWarning("Name为空,请重新输入","警告");
return;
}
String Age = GTK.gtk_entry_get_text(entryAge);
if(Age.equalsIgnoreCase(""))
{
showWarning("Age为空,请重新输入","警告");
return;
}
insertRecord(ID,Name, Age, treeViewApple);
}
}, null);
}
public static void insertRecord(String ID,String Name,String Age,int treeViewApple)
{
int iter = GTK.gtk_text_iter_new();
if(!GTK.gtk_tree_model_get_iter_first(liststore, iter))
{
createRecord( ID, Name, Age,iter);
}
else
{
do
{
//System.out.println("hello");
}while(GTK.gtk_tree_model_iter_next(liststore, iter));
//while(GTK.gtk_tree_model_iter_next(liststore, iter));
// 记一次调bug经理,,经常把iter_next写成了 iter_first导致不断的循环
//出现无限循环,最后嵌入 system打印出来即可。
createRecord( ID, Name, Age,iter);
}
GTK.gtk_text_iter_free(iter);
GTK.gtk_tree_view_set_model(treeViewApple, liststore);
}
public static void showColumnRow(int row, int column)
{
int i = 0;
if(0 == getNumberOfListstore(liststore))
{
System.out.println("100块都不给 还想查!");
return ;
}
if(row > getNumberOfListstore(liststore))
{
System.out.println("记录数没有! 请重新查询");
return;
}
int iter = GTK.gtk_tree_iter_new();
GTK.gtk_tree_model_get_iter_first(liststore, iter);
do
{
if(i == row)
{
String temp = GTK.gtk_tree_model_get_value(liststore, iter, column);
System.out.println(temp);
showInfo(temp,"显示信息");
return;
}
i++;
}while(GTK.gtk_tree_model_iter_next(liststore, iter));
}
public static int getNumberOfListstore(int liststore)
{
int sum = 0;
int iter = GTK.gtk_tree_iter_new();
if(!GTK.gtk_tree_model_get_iter_first(liststore, iter))
{
return sum;
}
do
{
sum++;
}while(GTK.gtk_tree_model_iter_next(liststore, iter));
return sum;
}
public static void tree_view_column_set_hide(int treeViewApple,int nthColumn,boolean visible)
{
int column =GTK.gtk_tree_view_get_column(treeViewApple, nthColumn);
GTK.gtk_tree_view_column_set_visible(column, visible);
}
public static void tree_view_column_resize(int treeViewApple,int nthColumn,boolean visible)
{
int column =GTK.gtk_tree_view_get_column(treeViewApple, nthColumn);
GTK.gtk_tree_view_column_set_resizable(column, visible);
}
public static void tree_view_column_recordabel(int treeViewApple,int nthColumn,boolean visible)
{
int column =GTK.gtk_tree_view_get_column(treeViewApple, nthColumn);
GTK.gtk_tree_view_column_set_reorderable(column, visible);
}
public static void tree_view_column_sort(int treeViewApple,int nthColumn,int sortcolumnid)
{
int column =GTK.gtk_tree_view_get_column(treeViewApple, nthColumn);
GTK.gtk_tree_view_column_set_sort_column_id(column, sortcolumnid);
}
public static void rowSelection()
{
int selection = GTK.gtk_tree_view_get_selection(treeViewApple);
GTK.gtk_tree_selection_set_mode(selection, GTK.GTK_SELECTION_MULTIPLE);
GTK.g_signal_connect(treeViewApple, "button-press-event", new IGCallBack()
{
@Override
public void execute(int instance, int eventData, Object object)
{
if(GTK.gdk_event_get_type(eventData)==GTK.GDK_2BUTTON_PRESS)
{
int[] indices = GTK.gtk_tree_view_get_selection_indices(treeViewApple);
System.out.println(indices[0]);
}
}
}, null);
}
/* public static void deleteOneRecore()
{
int selection = GTK.gtk_tree_view_get_selection(treeViewApple);
}*/
}
case3 工具栏+进度条+menu+statusIcon+开关按钮+calendar
import com.rupeng.gtk4j.GTK;
import com.rupeng.gtk4j.IGCallBack;
/**
* @author 叶昭良
* @time 2015年2月3日上午1:24:01
* @version TestToolBar V1.0
* @version TestToolBar V2.0 增加了一个日历控件,添加了天数变化时间和双击时间
* @version TestToolBar V2.0 增加了进度条的创建,和按钮事件 控制进度条
* @version TestToolBar V4.0 建议的开关按钮,未实现信号的接受。。。
* @version TestToolBar V5.0 增加了一个菜单控件
* @version TestToolBar V6.0 增加了一个StatusIcon的简单控件
*/
public class TestToolBar
{
/**
* @param args
*/
static int window;
static int gridHouse;
static double progress = 0.0;
public static void main(String[] args)
{
// TODO Auto-generated method stub
GTK.gtk_init();
window= GTK.gtk_window_new(GTK.GTK_WINDOW_TOPLEVEL);
GTK.gtk_widget_show(window);
GTK.g_signal_connect(window, "destroy", new IGCallBack()
{
@Override
public void execute(int instance, int eventData, Object object)
{
// TODO Auto-generated method stub
GTK.gtk_main_quit();
}
}, null);
//设置网格布局
gridHouse = GTK.gtk_grid_new();
GTK.gtk_widget_show(gridHouse);
GTK.gtk_container_add(window, gridHouse);
//定义一些常用的控件
int start = 0;
createToolbar(gridHouse,start);
start =1;
createCalendar(gridHouse,start);
start = 2;
createProgressBar(gridHouse, start);
start = 3;
createSwitchOn(gridHouse, start);
start = 4;
createMenu(gridHouse,start);
start = 5;
createStatusIcon(gridHouse,start);
//启动循环
GTK.gtk_main();
}
public static void createToolbar(int gridHouse,int start)
{
//创建工具栏容器
int tbApple = GTK.gtk_toolbar_new();
GTK.gtk_widget_show(tbApple);
GTK.gtk_widget_set_size_request(tbApple, 300, 20);
GTK.gtk_grid_attach(gridHouse, tbApple, 0, start, 1, 1);
int btnNew = GTK.gtk_tool_button_new(0, "新建");
GTK.gtk_tool_button_set_stock_id(btnNew, GTK.GTK_STOCK_NEW);
GTK.gtk_widget_show(btnNew);
GTK.gtk_toolbar_insert(tbApple, btnNew, 0);
int btnOpen = GTK.gtk_tool_button_new(0, "打开");
GTK.gtk_tool_button_set_stock_id(btnOpen, GTK.GTK_STOCK_OPEN);
GTK.gtk_widget_show(btnOpen);
GTK.gtk_toolbar_insert(tbApple, btnOpen, 1);
int btnSave = GTK.gtk_tool_button_new(0, "保存");
GTK.gtk_tool_button_set_stock_id(btnSave, GTK.GTK_STOCK_SAVE);
GTK.gtk_widget_show(btnSave);
GTK.gtk_toolbar_insert(tbApple, btnSave, 2);
}
public static void createCalendar(int gridHouse, int start)
{
final int clApple = GTK.gtk_calendar_new();
int labelApple = GTK.gtk_label_new("");
GTK.gtk_widget_show(clApple);
GTK.gtk_widget_show(labelApple);
GTK.gtk_grid_attach(gridHouse, clApple, 0, start, 1, 1);
GTK.gtk_grid_attach(gridHouse, clApple, 1, start, 1, 1);
GTK.gtk_widget_set_size_request(clApple, 200, 200);
GTK.g_signal_connect(clApple, "day-selected", new IGCallBack()
{
@Override
public void execute(int instance, int eventData, Object object)
{
// TODO Auto-generated method stub
int day = GTK.gtk_calendar_get_day(clApple);
int month = GTK.gtk_calendar_get_month(clApple);
int year = GTK.gtk_calendar_get_year(clApple);
System.out.println("用户选择了"+year+"年"+month+"月"+day+"日");
//showInfo("用户选择了"+year+"年"+month+"月"+day+"日","选择的日期");
}
}, null);
GTK.g_signal_connect(clApple, "day-selected-double-click", new IGCallBack()
{
@Override
public void execute(int instance, int eventData, Object object)
{
// TODO Auto-generated method stub
int day = GTK.gtk_calendar_get_day(clApple);
int month = GTK.gtk_calendar_get_month(clApple);
int year = GTK.gtk_calendar_get_year(clApple);
showInfo("用户选择了"+year+"年"+month+"月"+day+"日","选择的日期");
}
}, null);
}
public static boolean showInfo( String message,String title)
{
int msgDlg = GTK.gtk_message_dialog_new(0, GTK.GTK_DIALOG_DESTROY_WITH_PARENT|
GTK.GTK_DIALOG_MODAL,GTK.GTK_MESSAGE_INFO, GTK.GTK_BUTTONS_OK,message);
GTK.gtk_window_set_title(msgDlg, title);
int ret = GTK.gtk_dialog_run(msgDlg);
GTK.gtk_widget_destroy(msgDlg);
return ret == GTK.GTK_RESPONSE_OK;
}
public static void createProgressBar(int gridHouse,int start)
{
final int pbApple =GTK.gtk_progress_bar_new();
int btnApple =GTK.gtk_button_new_with_label("加快进度");
GTK.gtk_widget_show(btnApple);
GTK.gtk_widget_show(pbApple);
GTK.gtk_grid_attach(gridHouse, pbApple, 0, start, 1, 1);
GTK.gtk_grid_attach(gridHouse, btnApple, 1, start, 1, 1);
GTK.gtk_progress_bar_set_fraction(pbApple, progress);
//GTK.gtk_progress_bar_set_pulse_step()
/* try
{
Thread.sleep(1000);
} catch (InterruptedException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}*/
GTK.g_signal_connect(btnApple, "clicked", new IGCallBack()
{
@Override
public void execute(int instance, int eventData, Object object)
{
// TODO Auto-generated method stub
if(progress <= 1.0)
{
progress = progress + 0.2;
GTK.gtk_progress_bar_set_fraction(pbApple, progress);
}else
{
System.out.println("stop clicked");
}
}
}, null);
GTK.gtk_progress_bar_set_text(pbApple, "请稍后");
}
public static void createSwitchOn(int gridHouse, int start)
{
final int switchOff = GTK.gtk_switch_new();
final int label = GTK.gtk_label_new("");
GTK.gtk_widget_show(switchOff);
GTK.gtk_widget_show(label);
GTK.gtk_grid_attach(gridHouse, switchOff, 0, start, 1, 1);
GTK.gtk_grid_attach(gridHouse, label, 1, start, 1, 1);
GTK.gtk_switch_set_active(switchOff, true);
//GTK.g_signal_connect(switchOff, "state-set", new IGCallBack()
GTK.g_signal_connect(switchOff, "activate", new IGCallBack()
{
@Override
public void execute(int instance, int eventData, Object object)
{
// TODO Auto-generated method stub
System.out.println("hello");
if(GTK.gtk_switch_get_active(switchOff))
{
//GTK.gtk_label_set_text(label, "你打开了");
System.out.println("hello");
}
else
{
//GTK.gtk_label_set_text(label, "你关闭了");
System.out.println("fuck");
}
}
}, null);
}
public static void createMenu(int gridHouse, int start)
{
//分三步
//1创建单一菜单
//2创建一个菜单头
//3创建总的菜单条,把许多菜单头都挂到菜单条上
//创建一个菜单
int menu = GTK.gtk_menu_new();
int file = GTK.gtk_menu_item_new_with_label("_F文件");
int new1 = GTK.gtk_menu_item_new_with_label("新建");
int open1 = GTK.gtk_menu_item_new_with_label("打开");
int closed = GTK.gtk_menu_item_new_with_label("关闭");
int import1 = GTK.gtk_menu_item_new_with_mnemonic("_Import导入");
//int image = GTK.gtk_menu_tool_button_new_from_stock(GTK.GTK_STOCK_NEW);
//fengexian
GTK.gtk_widget_show(menu);
GTK.gtk_widget_show(new1);
GTK.gtk_widget_show(open1);
GTK.gtk_widget_show(closed);
GTK.gtk_widget_show(file);
GTK.gtk_widget_show(import1);
GTK.gtk_menu_shell_append(menu, file);
GTK.gtk_menu_shell_append(menu, new1);
GTK.gtk_menu_shell_append(menu, open1);
GTK.gtk_menu_shell_append(menu, closed);
GTK.gtk_menu_shell_append(menu, import1);
// 菜单条
int menubar = GTK.gtk_menu_bar_new();
GTK.gtk_widget_show(menubar);
GTK.gtk_grid_attach(gridHouse, menubar, 0, start, 1, 1);
//2 添加一个menu 到menu小头
int file_item = GTK.gtk_menu_item_new_with_label("File");
GTK.gtk_widget_show(file_item);
GTK.gtk_menu_item_set_submenu(file_item, menu);
//3 添加一个 menu小头到menubar
GTK.gtk_menu_shell_append(menubar, file_item);
// GTK.gtk_menu_attach_to_widget(menubar, attach_widget);
GTK.g_signal_connect(closed, "activate",new IGCallBack(){
@Override
public void execute(int instance, int eventData, Object object)
{
// TODO Auto-generated method stub
GTK.gtk_main_quit();
}
}, null);
}
public static void createStatusIcon(int gridHouse,int start)
{
int status = GTK.gtk_status_icon_new();
//GTK.gtk_widget_show(status);
//GTK.gtk_grid_attach(gridHouse, status, 0, status, 1, 1);
GTK.gtk_status_icon_set_from_stock(status, GTK.GTK_STOCK_CONNECT);
GTK.gtk_status_icon_set_tooltip_text(status, "hello"); //的确是会显示在下方
GTK.gtk_status_icon_set_visible(status, true);
GTK.g_signal_connect(status, "popup-menu", new IGCallBack() {
@Override
public void execute(int instance, int eventData, Object object)
{
// TODO Auto-generated method stub
/* int menu = GTK.gtk_menu_new();
int file = GTK.gtk_menu_item_new_with_label("_F文件");
int new1 = GTK.gtk_menu_item_new_with_label("新建");
int open1 = GTK.gtk_menu_item_new_with_label("打开");
int closed = GTK.gtk_menu_item_new_with_label("关闭");
int import1 = GTK.gtk_menu_item_new_with_mnemonic("_Import导入");
//int image = GTK.gtk_menu_tool_button_new_from_stock(GTK.GTK_STOCK_NEW);
//fengexian
GTK.gtk_widget_show(menu);
GTK.gtk_widget_show(new1);
GTK.gtk_widget_show(open1);
GTK.gtk_widget_show(closed);
GTK.gtk_widget_show(file);
GTK.gtk_widget_show(import1);
GTK.gtk_menu_shell_append(menu, file);
GTK.gtk_menu_shell_append(menu, new1);
GTK.gtk_menu_shell_append(menu, open1);
GTK.gtk_menu_shell_append(menu, closed);
GTK.gtk_menu_shell_append(menu, import1);
GTK.gtk_menu_popup(menu);*/
showInfo("hello","wenho");
}
}, null);
/* GTK.g_signal_connect(status, "statusIconActivate", new IGCallBack() {
@Override
public void execute(int instance, int eventData, Object object)
{
showInfo("hello","wenho");
}},null);*/
}
}