|
|
| 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);
}
} |