「JTextComponent 3」の版間の差分
ナビゲーションに移動
検索に移動
(ページの作成:「==JTextComponent 3== *ドキュメントの変更を感知 *キャレットの状態を感知 File:0742_jtext3.jpg import java.awt.BorderLayout; import j…」) |
|||
1行目: | 1行目: | ||
− | ==JTextComponent 3== | + | ==[[JTextComponent 3]]== |
*ドキュメントの変更を感知 | *ドキュメントの変更を感知 | ||
*キャレットの状態を感知 | *キャレットの状態を感知 | ||
6行目: | 6行目: | ||
import java.awt.BorderLayout; | import java.awt.BorderLayout; | ||
− | import java.awt. | + | import java.awt.[[R]]ectangle; |
− | import javax.swing.JFrame; | + | import javax.swing.[[JFrame]]; |
import javax.swing.JLabel; | import javax.swing.JLabel; | ||
import javax.swing.JPanel; | import javax.swing.JPanel; | ||
import javax.swing.JScrollPane; | import javax.swing.JScrollPane; | ||
import javax.swing.JTextArea; | import javax.swing.JTextArea; | ||
− | import javax.swing. | + | import javax.swing.[[Swing]]Utilities; |
import javax.swing.event.CaretEvent; | import javax.swing.event.CaretEvent; | ||
import javax.swing.event.CaretListener; | import javax.swing.event.CaretListener; | ||
23行目: | 23行目: | ||
*/ | */ | ||
public class JTextTest3 { | public class JTextTest3 { | ||
− | private JFrame frame; | + | private [[JFrame]] frame; |
private JTextArea txtArea; | private JTextArea txtArea; | ||
private JLabel changeStats; | private JLabel changeStats; | ||
29行目: | 29行目: | ||
private void createUI() { | private void createUI() { | ||
− | frame = new JFrame("TextTest3"); | + | frame = new [[JFrame]]("TextTest3"); |
− | frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); | + | frame.setDefaultCloseOperation([[JFrame]].EXIT_ON_CLOSE); |
caretStats = new CaretListenerLabel("caret:"); | caretStats = new CaretListenerLabel("caret:"); | ||
changeStats = new JLabel("change:"); | changeStats = new JLabel("change:"); | ||
JPanel statusPanel = new JPanel(new BorderLayout()); | JPanel statusPanel = new JPanel(new BorderLayout()); | ||
− | statusPanel.add(changeStats, BorderLayout. | + | statusPanel.add(changeStats, BorderLayout.CENTE[[R]]); |
statusPanel.add(caretStats, BorderLayout.SOUTH); | statusPanel.add(caretStats, BorderLayout.SOUTH); | ||
41行目: | 41行目: | ||
JPanel basePanel = new JPanel(new BorderLayout()); | JPanel basePanel = new JPanel(new BorderLayout()); | ||
− | basePanel.add(new JScrollPane(txtArea), BorderLayout. | + | basePanel.add(new JScrollPane(txtArea), BorderLayout.CENTE[[R]]); |
basePanel.add(statusPanel, BorderLayout.SOUTH); | basePanel.add(statusPanel, BorderLayout.SOUTH); | ||
53行目: | 53行目: | ||
} | } | ||
public static void main(String[] args) { | public static void main(String[] args) { | ||
− | + | [[Swing]]Utilities.invokeLater( | |
− | new | + | new [[R]]unnable(){ |
public void run() { | public void run() { | ||
JTextTest3 jft = new JTextTest3(); | JTextTest3 jft = new JTextTest3(); | ||
89行目: | 89行目: | ||
int dot = e.getDot(); | int dot = e.getDot(); | ||
// モデル内の指定された位置を、ビュー座標系内の場所に変換 | // モデル内の指定された位置を、ビュー座標系内の場所に変換 | ||
− | + | [[R]]ectangle rect = txtArea.modelToView(dot); | |
caretStats.setText("caret: text pos=" + dot | caretStats.setText("caret: text pos=" + dot | ||
+ " view location [" + rect.x + "," + rect.y + "]"); | + " view location [" + rect.x + "," + rect.y + "]"); |
2020年2月16日 (日) 04:28時点における最新版
JTextComponent 3
- ドキュメントの変更を感知
- キャレットの状態を感知
import java.awt.BorderLayout; import java.awt.Rectangle; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTextArea; import javax.swing.SwingUtilities; import javax.swing.event.CaretEvent; import javax.swing.event.CaretListener; import javax.swing.event.DocumentEvent; import javax.swing.event.DocumentListener; /** * @see http://java.sun.com/docs/books/tutorial/uiswing/components/generaltext.html */ public class JTextTest3 { private JFrame frame; private JTextArea txtArea; private JLabel changeStats; private CaretListenerLabel caretStats; private void createUI() { frame = new JFrame("TextTest3"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); caretStats = new CaretListenerLabel("caret:"); changeStats = new JLabel("change:"); JPanel statusPanel = new JPanel(new BorderLayout()); statusPanel.add(changeStats, BorderLayout.CENTER); statusPanel.add(caretStats, BorderLayout.SOUTH); txtArea = new JTextArea(10, 30); JPanel basePanel = new JPanel(new BorderLayout()); basePanel.add(new JScrollPane(txtArea), BorderLayout.CENTER); basePanel.add(statusPanel, BorderLayout.SOUTH); txtArea.getDocument().addDocumentListener( new MyDocumentListener()); txtArea.addCaretListener(caretStats); frame.getContentPane().add(basePanel); frame.pack(); frame.setVisible(true); } public static void main(String[] args) { SwingUtilities.invokeLater( new Runnable(){ public void run() { JTextTest3 jft = new JTextTest3(); jft.createUI(); } } ); } /** * ドキュメントの変更を感知 */ class MyDocumentListener implements DocumentListener { public void changedUpdate(DocumentEvent e) { changeStats.setText("chage:chage"); } public void insertUpdate(DocumentEvent e) { changeStats.setText("change:insert"); } public void removeUpdate(DocumentEvent e) { changeStats.setText("change:remove"); } } /** * キャレットの状態を感知 */ @SuppressWarnings("serial") class CaretListenerLabel extends JLabel implements CaretListener { public CaretListenerLabel(String label) { super(label); } public void caretUpdate(CaretEvent e) { try { int dot = e.getDot(); // モデル内の指定された位置を、ビュー座標系内の場所に変換 Rectangle rect = txtArea.modelToView(dot); caretStats.setText("caret: text pos=" + dot + " view location [" + rect.x + "," + rect.y + "]"); } catch (Exception ex) { ex.printStackTrace(); } } } }
© 2006 矢木浩人