Java实现查看SEGY(.su格式)数据道头字信息的GUI图形用户界面
首先我们先生成一个.su格式的文件:
$ suplane >v.su
程序中文件名改为v.su
new mySEGYJFrame("v.su");
编译与运行:
$ javac Demo_63_ReadSEGY_4.java
$ java mySEGYJFrame
弹出主界面(在红圈处选择要显示的道头字,选择后会在绿色箭头处显示出道头字的表格):
下面给出代码:
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseListener;
import java.awt.event.MouseAdapter;
import java.awt.event.WindowAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.MouseEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.Toolkit;
import java.awt.Dimension;
import java.awt.BorderLayout;
import java.awt.GridLayout;
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.Color;
import java.awt.FileDialog;
import java.awt.Color;
import java.awt.GraphicsEnvironment;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Insets;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.BasicStroke;
import java.awt.Image;
import java.awt.image.BufferedImage;import javax.swing.JColorChooser;
import javax.swing.JComponent;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextPane;
import javax.swing.JEditorPane;
import javax.swing.JButton;
import javax.swing.JMenu;
import javax.swing.JPopupMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JProgressBar;
import javax.swing.JToolBar;
import javax.swing.JList;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.JScrollPane;
import javax.swing.JSeparator;
import javax.swing.JDialog;
import javax.swing.JComboBox;
import javax.swing.JCheckBox;
import javax.swing.JCheckBoxMenuItem;
import javax.swing.UIManager;
import javax.swing.BorderFactory;
import javax.swing.border.Border;
import javax.swing.border.TitledBorder;
import javax.swing.border.EtchedBorder;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
import javax.swing.Box;
import javax.swing.BoxLayout;
import javax.swing.Timer;
import javax.swing.JOptionPane;
import javax.swing.JFileChooser;
import javax.swing.filechooser.FileFilter;
import javax.swing.filechooser.FileNameExtensionFilter;
import javax.swing.text.Style;
import javax.swing.text.StyleConstants;
import javax.swing.text.StyledDocument;
import javax.swing.text.SimpleAttributeSet;
import javax.swing.text.MutableAttributeSet;
import javax.swing.text.AttributeSet;
import javax.swing.border.EmptyBorder;
import javax.swing.event.DocumentEvent;import javax.swing.event.DocumentListener;import java.text.DateFormat;import java.util.Calendar;
import java.util.Date;
import java.util.Locale;
import java.util.Scanner;import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.Writer;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.DataInputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;import java.nio.file.Path;import javax.imageio.ImageIO;import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.Vector;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JInternalFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JSeparator;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;
import javax.swing.table.DefaultTableModel;
import net.java.dev.designgridlayout.DesignGridLayout;class cjbsegy{
/* reference: cjbsegy.h */int tracl, tracr, fldr, tracf, ep, cdp, cdpt;/* int (0-6) */short trid, nvs, nhs, duse;/* short (7-10) */int offset, gelev, selev, sdepth, gdel, sdel, swdep, gwdep;/* int (11-18) */short scalel, scalco;/* short (19-20) */int sx, sy, gx, gy;/* int (21-24) */ short counit, wevel, swevel, sut, gut;/* short (25-70) */short sstat, gstat, tstat, laga, lagb; short delrt, muts, mute, ns, dt; short gain, igc, igi, corr, sfs; short sfe, slen, styp, stas, stae; short tatyp, afilf, afils, nofilf, nofils;short lcf, hcf, lcs, hcs, year;short day, hour, minute, sec, timbas;short trwf, grnors, grnofr, grnlof, gaps; short otrav;float d1, f1, d2, f2, ungpow, unscale;/* float (71-76) */ int ntr; /* int (77) */short mark, shortpad;/* short (78-79) */int line3d, cdp3d;/* int (80-81) */short unass0,unass1,unass2,unass3,unass4 ;short unass5,unass6,unass7,unass8,unass9 ;String[] segy = {"tracl", "tracr", "fldr", "tracf", "ep","cdp", "cdpt", "trid", "nvs", "nhs","duse", "offset", "gelev", "selev", "sdepth","gdel", "sdel", "swdep", "gwdep", "scalel","scalco", "sx", "sy", "gx", "gy","counit", "wevel", "swevel", "sut", "gut","sstat", "gstat", "tstat", "laga", "lagb","delrt", "muts", "mute", "ns", "dt","gain", "igc", "igi", "corr", "sfs","sfe", "slen", "styp", "stas", "stae","tatyp", "afilf", "afils", "nofilf", "nofils","lcf", "hcf", "lcs", "hcs", "year","day", "hour", "minute", "sec", "timbas","trwf", "grnors", "grnofr", "grnlof", "gaps","otrav", "d1", "f1", "d2", "f2","ungpow", "unscale", "ntr", "mark", "shortpad","line3d", "cdp3d","unass0", "unass1", "unass2", "unass3", "unass4","unass5", "unass6", "unass7", "unass8", "unass9"};}class Swap{/* float */public static float swap (float value){int intValue = Float.floatToRawIntBits (value);intValue = swap (intValue);return Float.intBitsToFloat (intValue);}/* int */public static int swap (int value){int b1 = (value >> 0) & 0xff;int b2 = (value >> 8) & 0xff;int b3 = (value >> 16) & 0xff;int b4 = (value >> 24) & 0xff;return b1 << 24 | b2 << 16 | b3 << 8 | b4 << 0;}/* short */public static short swap (short value){int b1 = value & 0xff;int b2 = (value >> 8) & 0xff;return (short) (b1 << 8 | b2 << 0);}/* long */public static long swap (long value){long b1 = (value >> 0) & 0xff;long b2 = (value >> 8) & 0xff;long b3 = (value >> 16) & 0xff;long b4 = (value >> 24) & 0xff;long b5 = (value >> 32) & 0xff;long b6 = (value >> 40) & 0xff;long b7 = (value >> 48) & 0xff;long b8 = (value >> 56) & 0xff;return b1 << 56 | b2 << 48 | b3 << 40 | b4 << 32 |b5 << 24 | b6 << 16 | b7 << 8 | b8 << 0;}/* double */public static double swap (double value){long longValue = Double.doubleToLongBits (value);longValue = swap (longValue);return Double.longBitsToDouble (longValue);}/* short array */public static void swap (short[] array){for (int i = 0; i < array.length; i++)array[i] = swap (array[i]);}/* int array */public static void swap (int[] array){for (int i = 0; i < array.length; i++)array[i] = swap (array[i]);}/* long array */public static void swap (long[] array){for (int i = 0; i < array.length; i++)array[i] = swap (array[i]);}/* float array */public static void swap (float[] array){for (int i = 0; i < array.length; i++)array[i] = swap (array[i]);}/* double array */public static void swap (double[] array){for (int i = 0; i < array.length; i++)array[i] = swap (array[i]);}
}class mySEGYJFrame extends JFrame {private String filename;private static JLabel countlabel = new JLabel();private Object[] columnNames = new Object[]{"Trace # "};private DefaultTableModel model;private ArrayList<cjbsegy> hdrlist;private JTable hdrtable;private JScrollPane hdrscrollpane;private String[] segy = {"tracl", "tracr", "fldr", "tracf", "ep","cdp", "cdpt", "trid", "nvs", "nhs","duse", "offset", "gelev", "selev", "sdepth","gdel", "sdel", "swdep", "gwdep", "scalel","scalco", "sx", "sy", "gx", "gy","counit", "wevel", "swevel", "sut", "gut","sstat", "gstat", "tstat", "laga", "lagb","delrt", "muts", "mute", "ns", "dt","gain", "igc", "igi", "corr", "sfs","sfe", "slen", "styp", "stas", "stae","tatyp", "afilf", "afils", "nofilf", "nofils","lcf", "hcf", "lcs", "hcs", "year","day", "hour", "minute", "sec", "timbas","trwf", "grnors", "grnofr", "grnlof", "gaps","otrav", "d1", "f1", "d2", "f2","ungpow", "unscale", "ntr", "mark", "shortpad","line3d", "cdp3d","unass0", "unass1", "unass2", "unass3", "unass4","unass5", "unass6", "unass7", "unass8", "unass9"};mySEGYJFrame(String filename)throws IOException,NoSuchFieldException,IllegalAccessException{this.filename = filename;setTitle("rongtao's segy header show");setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);Toolkit toolkit = getToolkit();Dimension size = toolkit.getScreenSize();setLocation(size.width/10 , size.height/7 );hdrlist = ReadSEGY.readSegy(this.filename);model = new DefaultTableModel(columnNames, hdrlist.size());hdrtable = new JTable(model){@Overridepublic boolean isCellEditable(int row, int column){return false;}};hdrtable.getColumnModel().getColumn(0).setWidth(10);hdrtable.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);for(int itrace = 0;itrace<hdrlist.size();itrace++){hdrtable.setValueAt(Integer.toString(itrace+1),itrace,0);}hdrscrollpane = new JScrollPane(hdrtable);JComboBox info = new JComboBox<String>(segy);info.setSelectedIndex(0);info.addItemListener(new itemlistener());JPanel panel1 = new JPanel();JLabel titlelabel = new JLabel("SEGY header info");DesignGridLayout layout1 = new DesignGridLayout(panel1);layout1.row().left().add(new JSeparator()).fill().withOwnRowWidth();layout1.row().center().add(titlelabel);layout1.row().left().add(new JSeparator()).fill().withOwnRowWidth();layout1.row().left().add(info);layout1.row().left().add(new JSeparator()).fill().withOwnRowWidth();layout1.row().left().add(hdrscrollpane);layout1.row().left().add(new JSeparator()).fill().withOwnRowWidth();JInternalFrame internalFrame = new JInternalFrame("SEGY header",true,true, true, true); DesignGridLayout mainLayout = new DesignGridLayout(internalFrame.getContentPane());mainLayout.row().grid().add(panel1);internalFrame.pack();internalFrame.setVisible(true);getContentPane().add(internalFrame);setVisible(true);pack();}class itemlistener implements ItemListener{public void itemStateChanged(ItemEvent e) {if (e.getStateChange() == ItemEvent.SELECTED) {JComboBox combo = (JComboBox) e.getSource();String item = (combo.getSelectedItem()).toString();DefaultTableModel temp =(DefaultTableModel)hdrtable.getModel();int row = hdrtable.getRowCount(); int col = hdrtable.getColumnCount(); Vector<Object> newCol = new Vector<Object>();newCol.add(item);temp.addColumn(newCol);try{Field h = cjbsegy.class.getDeclaredField(item);h.setAccessible(true);for(int itrace = 0;itrace<hdrlist.size();itrace++){hdrtable.setValueAt(h.get(hdrlist.get(itrace)),itrace,col);}}catch(Exception ee){ee.printStackTrace();}}}}static class ReadSEGY{static int counttrace = 0;public static ArrayList<cjbsegy> readSegy(String filename)throws java.io.IOException,NoSuchFieldException,IllegalAccessException{DataInputStream fp = null;if(!new File(filename).exists()){ System.out.println("The "+filename +" file dont't exists");return null; } fp = new DataInputStream(new FileInputStream(new File(filename)));countlabel.setText(Integer.toString(++counttrace));cjbsegy hdr = readCjbsegy(fp);fp.skip(hdr.ns*4);ArrayList<cjbsegy> list = new ArrayList<cjbsegy>();list.add(hdr);do{ countlabel.setText(Integer.toString(++counttrace));if(fp.available()<=0)break;list.add(readCjbsegy(fp));fp.skip(hdr.ns*4);} while(fp.available()>0);return list;}//read fileprivate static cjbsegy readCjbsegy(DataInputStream fp)throws java.io.IOException,NoSuchFieldException,IllegalAccessException{cjbsegy hdr = new cjbsegy();for(int i = 0; i<92; i++){Field strs = cjbsegy.class.getDeclaredField(hdr.segy[i]);strs.setAccessible(true);if( ( i>=0 && i<=6 ) || ( i>=11 && i<=18 ) || ( i>=21 && i<=24 ) || i==77 || ( i>=80 && i<=81 ) )strs.set(hdr,fp.readInt());else if( ( i>=7 && i<=10 ) || ( i>=19 && i<=20 ) || ( i>=25 && i<=70 ) || ( i>=78 && i<=79 )|| ( i>=82 && i<=91 ) )strs.set(hdr,fp.readShort());else strs.set(hdr,fp.readFloat());}return hdr;}}public static void main(String[]args) throws java.io.IOException,NoSuchFieldException,IllegalAccessException{new mySEGYJFrame("v.su");}}
class mySEGYParasJFrame extends JFrame{mySEGYParasJFrame(){}
}
Java实现查看SEGY(.su格式)数据道头字信息的GUI图形用户界面相关推荐
- java界面 ppt_Java GUI图形用户界面 课件.ppt
Java GUI图形用户界面 课件 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ...
- java图形用户界面控件介绍,GUI(图形用户界面)详解
一.GUI(图形用户界面) GUI Graphical User Interface(图形用户接口) 用图形的方式,来显示计算机操作的界面,这样更方便更直观 CLI Command line User ...
- 关于SU(SeismicUnix)的使用——segy格式数据与su格式数据之间的转换
文件读取--segyread(segy→su) ---su中的基本操作,读取segy文件,并将其转化为.su文件. 在linux命令行中直接输入下面第一行代码,将filename换成需要转换的文件名称 ...
- Java | GUI 图形用户界面
一.什么是GUI GUI 全称 Graphical User Interface 图形用户界面,指采用图形方式显示的计算机操作用户界面. 软件以图形界面形式运行时,用户可借助于菜单.按钮.标签等组件和 ...
- JAVA GUI(图形用户界面)
1.GUI概述 目前,我们编写的程序都是基于控制台的程序GUI(Graphical User Interface)即图形用户界面,它能够使应用程序看上去更加友好 2.Swing概念 位于javax.s ...
- Java GUI(图形用户界面)概述
1.GUI概述 目前,我们编写的程序都是基于控制台的程序 GUI(Graphical User Interface)即图形用户界面,它能够使应用程序看上去更加友好 2.Swing概念 位于javax. ...
- EasyUI+JSP之java读取数据库后JSON格式数据的返回及调用
做作业工程中遇到一些问题,特此记录一下 解决的问题:使用EasyUI框架搭建简单学生管理系统(数据库增删改查)操作时配合JSP,不知道如何把从数据库获得的数据封装成JSON格式并传回前端JSP并进行展 ...
- java dem数据格式解析_NSDTF-DEM格式数据
NSDTF-DEM是一种国家标准空间数据的交换格式,后缀一般是.dem,使用记事本打开会发现它是明码. 如: 头文件信息: NSDTF-DEM 1.0 M 0.000000 0.000000 3951 ...
- java与javascript之间json格式数据互转
javascript中对象与字符串的互转 对象转为字符串:通过JSON.encode方法,这个是json.js里面的方法,引入到当前文件就可以了. 字符串转换为对象:①使用JSON.decode方法, ...
最新文章
- arm linux 核心板 制作,Linux下制作给ARM开发板使用的文件系统
- Codeforces Round #723 (Div. 2) D. Kill Anton 线段树 + 暴力
- dijkstra算法学习
- 说下Java堆空间结构,及常用的jvm内存分析命令和工具
- Apache Flink,流计算?不仅仅是流计算!
- HTML5的Web存储
- mfc在调整界面时左边的控件会丢失_Qt项目中如何完成一个漂亮的界面
- Emacs进阶之选择当前word/line
- python—如何删除(保留)字符串中除字母、数字外的其他元素
- Ember.js中文介绍
- 迹中元素可交换性的证明tr(AB)=tr(BA)
- PowerDesigner(八)-面向对象模型(用例图,序列图,类图,生成Java源代码及Java源代码生成类图)(转)...
- 数据通信与计算机网络
- mysql 8.0 手册
- 暴风影音 android 电视,暴风影音飞屏版电视端
- 公司建站域名需要多少钱?
- 8255A的控制字和C口状态字
- 开源Go语言数值算法库 An open numerical library purely based on Go programming language
- 用java开发编译器之:Thompson构造,将正则表达式转换为有限状态自动机
- 软件系统的标准化和产品化
热门文章
- 第四章 前端开发——JQuery库
- php面试题汇总一(基础篇附答案)
- 微信小程序Server端环境配置
- Android如何获取Wifi名称即SSID
- 如何解决Office 2010安装报错1907,没有足够权限注册字体?
- MySQL Connector/C++入门教程(上)
- 实例1.1:通过HWND获得CWnd指针
- sqlserver2008安装报错 “Previous releases of Microsoft Visual Studio 2008″ failed.
- 设计素材画面太平淡?优秀案例网页教你如何用色彩丰富画
- 别再只盯着国外!在集设发现了优秀设计师原创作品!