|
|
TopPage > Java on Mac |
本ページでは特にMac環境だけの内容ではないですが主に動作確認、実行をMac上で行なっていて
他のOSではあまり確認していない内容になります。まぁJavaなので他のOS上でも動くとは思いますが。。。
Project Name | :SampleHelloFrame |
Package Name | :net.HobNote |
Class Name | :HelloFrame |
swingでJFrameにMenubarを配置するとLinux, WindowsのMenu barと同様に
Frame bar直下に配置できるが
MacっぽくMac環境のOS X UIのスクリーン上のTop barに配置するには、
System.setProperty("apple.laf.useScreenMenuBar", "true");を以下のように追記する。
.... public HelloFrame() { System.setProperty("apple.laf.useScreenMenuBar", "true"); .... |
これだけだとExitの位置や環境設定のメニューの位置がOS Xの作法と一致しないので
もう少し手を加える必要があるが、簡単なアプリの場合これでそれっぽく作ることができる。
ちゃんとしたUIにしたい場合は以下のサイトを参照
参考URL:
http://d.hatena.ne.jp/seraphy/20100622
https://developer.apple.com/library/mac/documentation/Java/Reference/Java_PropertiesRef/Articles/JavaSystemProperties.html
Javaでシリアル通信を行うライブラリで有名なのがRXTXがあるがOSごとにライブラリ導入が
異なり少し手間がかかりそうなので今回jSerialCommを使ってみることにした。
jSerialCommのサイトの上側[.jar][tar.gz][.zip]より[.jar]をクリックして
jSerialComm-x.x.x.jarをダウンロードする。
で、適当なディレクトリに置く(java用の外部jarライブラリを集めてるような所が望ましい)
(URL:https://fazecast.github.io/jSerialComm/)
eclispeでprojectを新規作成してGUIにswingを選択。
eclipseメインメニューより[プロジェクト]->[プロパティー]でプロパティーダイアログが開くので
左側[Javaのビルド・パス]を選択表示。ライブラリタブを選択して外部JARの追加でjSerialComm-x.x.x.jarを追加する。
java sorceのimport記述のところには、
.... import com.fazecast.jSerialComm.*; .... |
Mac bookにUNOを繋げて実行してみると、
このjavaのsourceは、
package net.hobnote; import java.awt.BorderLayout; import java.awt.EventQueue; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.border.EmptyBorder; import javax.swing.JMenuBar; import javax.swing.JMenuItem; import javax.swing.KeyStroke; import java.awt.event.KeyEvent; import java.awt.event.InputEvent; import javax.swing.JMenu; import java.awt.event.ActionListener; import java.awt.event.ActionEvent; import javax.swing.JButton; import com.fazecast.jSerialComm.*; import javax.swing.JTextArea; import javax.swing.JScrollPane; public class serial_main extends JFrame { private JPanel contentPane; private JTextArea textAreaLog = new JTextArea(); /** * Launch the application. */ public static void main(String[] args) { EventQueue.invokeLater(new Runnable() { public void run() { try { serial_main frame = new serial_main(); frame.setVisible(true); } catch (Exception e) { e.printStackTrace(); } } }); } /** * Create the frame. */ public serial_main() { setTitle("SerialTest"); setResizable(false); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setBounds(100, 100, 640, 405); JMenuBar menuBar = new JMenuBar(); setJMenuBar(menuBar); JMenu menu = new JMenu("ふぁいる"); menuBar.add(menu); JMenuItem menuItem = new JMenuItem("終了"); menuItem.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { System.exit(0); } }); menuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_Q, InputEvent.ALT_MASK)); menu.add(menuItem); contentPane = new JPanel(); contentPane.setBorder(new EmptyBorder(5, 5, 5, 5)); setContentPane(contentPane); contentPane.setLayout(null); JButton btnExit = new JButton("Exit"); btnExit.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { System.exit(0); } }); btnExit.setBounds(517, 317, 117, 29); contentPane.add(btnExit); JButton btnCheckcom = new JButton("CheckCom"); btnCheckcom.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { SerialPort[] ports = SerialPort.getCommPorts(); textAreaLog.setText(""); for (int i = 0; i < ports.length; i++) { textAreaLog.append("[" + i + "]\n"); textAreaLog.append("SystemPortName is "+ports[i].getSystemPortName()+"\n"); textAreaLog.append(" DescriptivePortName is "+ports[i].getDescriptivePortName() +"\n"); textAreaLog.append(" PortDescription is " + ports[i].getPortDescription() +"\n"); } } }); btnCheckcom.setBounds(264, 21, 117, 29); contentPane.add(btnCheckcom); JScrollPane scrollPane = new JScrollPane(); scrollPane.setBounds(23, 62, 591, 243); contentPane.add(scrollPane); scrollPane.setViewportView(textAreaLog); } } |