Javaのラジオボタンの取得ってどうやるのか、isSelected()の判定はあったが、どこを選択されているかがなかった。なので一つずつ判定していった。アンドロイドのspinnerだったら選択されたアイテムを取得ができるのでswingにもあるのかと思っていた。
for (int i = 0 ; i < radio.length; i++){
if (radio[i].isSelected()){
System.out.println(i+"番目の"+radio[i].getText()+"が選択されました");
}
}
buttonのクリック処理をラムダ式で書いたり。jsだと無名関数だろうか
button.addActionListener(
e -> {
System.out.println("ボタンが押されました。");
}
);
for分の拡張を選ぶとラジオボタンにフォントを指定して、グループに追加、メニューの追加の処理が簡単になった。
for (JRadioButtonMenuItem jRadioButtonMenuItem : radiomenuitem) {
jRadioButtonMenuItem.setFont(new Font("UDデジタル教科書体", Font.BOLD, 16));
group.add(jRadioButtonMenuItem);
menu[1].add(jRadioButtonMenuItem);
}
ただ、以前のほうがわかりやすいなとも思う。
for(int i=0;i<radiomenuitem.length;i++){
group.add(radiomenuitem[i]);
}
ファイルを開く選択ダイアログの表示。下記サイトを参考にしつつ、ラムダ式っぽく書き換えた。file.toPath()やtry catchはintellijが勝手に書くので、中身だけ書いた。標準でutf-8に指定されているが、文字コードを判別しようとするとまた別の処理やライブラリが必要。
menuitem[0].addActionListener(
e -> {
JFileChooser filechooser = new JFileChooser();
int selected = filechooser.showOpenDialog(frame);
if (selected == JFileChooser.APPROVE_OPTION){
File file = filechooser.getSelectedFile();
try {
var text=Files.readString(file.toPath(), StandardCharsets.UTF_8);
textArea.setText(text);
} catch (IOException ex) {
throw new RuntimeException(ex);
}// label.setText(file.getName());
}else if (selected == JFileChooser.CANCEL_OPTION){
// label.setText("キャンセルされました");
}else if (selected == JFileChooser.ERROR_OPTION){
// label.setText("エラー又は取消しがありました");
}
}
);
テキストファイルに保存のダイアログ使う。
menuitem[1].addActionListener(
e -> {
JFileChooser filechooser = new JFileChooser();
int selected = filechooser.showSaveDialog(frame);
if (selected == JFileChooser.APPROVE_OPTION) {
File file = filechooser.getSelectedFile();
var text = textArea.getText();
try {
Files.writeString(file.toPath(), text, StandardCharsets.UTF_8);
} catch (IOException ex) {
throw new RuntimeException(ex);
}
// label.setText(file.getName());
} else if (selected == JFileChooser.CANCEL_OPTION) {
// label.setText("キャンセルされました");
} else if (selected == JFileChooser.ERROR_OPTION) {
// label.setText("エラー又は取消しがありました");
}
}
);
終了処理
menuitem[3].addActionListener(e -> {
System.exit(0);
});
古い書き方を使いたくても、最近の書き方を知らないとサンプルコードが読めなくなってライブラリが使いづらくなる。
JavaのGUIを手入力じゃない方法を探していると、「GUI デザイナーGUI デザイナー」というのがあったので見ておく。
JavaFXとswingでどっちがいいのだろうか、XMLで書くとUIとコードが分離できていいのかなと思っていたがはてさて。
JAVのGUI配置