いつもありがとうございます。
現在、JavaでGUIのメモ帳作りをしています。
ユーザーが指定(ドラッグ)した範囲の文字を変更できるようにしたいです。
入力された文字のフォントやサイズ、色などを変更するツールバーのようなもの(Wordのツールバーの簡易的なイメージです)を設置したいと考えているのですがなかなかうまくいきません。
というのも、おそらく私が作ろうとしているメモ帳は少し特殊で、テキスト入力を受ける付けるコンポーネントがJTextPaneクラスではなくJTableクラスのインスタンスだからだと思いました。
*メモ帳の仕様上、複数行・列にしたいため、JTextPaneではなく、JTableを使っています。
自力で調べた結果、JTextPaneの場合は親子関係にあるためJTextComponentのメソッドを使えばできることがわかったのですが、
JTableクラスからだと、JTextComponentのメソッドを呼び出せず・・・というところで立ち止まってしまいました。
JTableの文字のフォントやサイズを変更できるようにするにはどのようにすれば良いでしょうか?
JTextComponentに用意されているようなツールバーを作れるようなクラスはあるのでしょうか?
よろしくお願いします。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答2件
0
やりたい事を伺っていると、JTableを使うよりもJEditorPaneを使ってHTMLでコンテンツを作る形の方がよさそうに思います。Java Swing Tips - てんぷらメモにサンプルコードがたくさんあるので、そちらを参考にされるとよいのではないでしょうか?
※JTableのフォント変更についても解説が色々あります。
投稿2015/09/03 14:46
退会済みユーザー
総合スコア0
0
ベストアンサー
JTable.setFont
メソッドで変更できます。
ただし、セルの高さは自動で変わってくれないので合わせて変更する必要があります。
(追記)
セルに属性を持たせるのではなく、独自のCellRenderer
を作ってそこで制御するようにします。
下記の例では、特定のセルだけ、2行目の左から2列目だけ(つまり"d"だけ)フォントを変えています。
ご質問のようなことをするには、MyCellRenderer
クラスに2次元配列を用意して、そこにフォントなどの情報を持たせるようにすればできると思います。
lang
1import java.awt.Component; 2import java.awt.Font; 3import javax.swing.JFrame; 4import javax.swing.JLabel; 5import javax.swing.JTable; 6import javax.swing.table.DefaultTableCellRenderer; 7 8public final class App extends JFrame { 9 10 private JTable table; 11 12 public App() { 13 setTitle("App"); 14 setDefaultCloseOperation(EXIT_ON_CLOSE); 15 table = new JTable(new Object[][] { 16 new Object[] { "a", "b" }, new Object[] { "c", "d" } }, 17 new Object[] { "col1", "col2" }); 18 table.setDefaultRenderer(Object.class, new MyCellRenderer()); 19 add(table); 20 } 21 22 static class MyCellRenderer extends DefaultTableCellRenderer { 23 24 @Override 25 public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, 26 boolean hasFocus, int row, int column) { 27 if (row == 1 && column == 1) { 28 JLabel label = new JLabel(String.valueOf(value)); 29 label.setFont(new Font("monospace", Font.BOLD, 16)); 30 // 良くないやりかた:追記2を参照 31 return label; 32 } 33 return super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column); 34 } 35 36 } 37 38 public static void main(String[] args) { 39 javax.swing.SwingUtilities.invokeLater(new Runnable() { 40 public void run() { 41 App app = new App(); 42 app.setSize(600, 200); 43 app.setLocationRelativeTo(null); 44 app.setVisible(true); 45 } 46 }); 47 } 48 49}
(追記2)
JLabel
をそのまま返すと選択状態が描画できなくなってしまうので、ダメでした。すみません。
super.getTableCellRendererComponent
のコンポーネントに直接フォント変更で行けるはずです。
選択したセルをBOLDにするMyCellRenderer
を書いてみましたので、参考にしてください。
static class MyCellRenderer extends DefaultTableCellRenderer { JTable table; Map<Point, Font> cellRendererMap; public MyCellRenderer(JTable table) { this.table = table; this.cellRendererMap =new HashMap<>(); } void applyBoldToSelectedCells() { Font baseFont = table.getFont(); int[] cols = table.getSelectedColumns(); int[] rows = table.getSelectedRows(); for (int row : rows) { for (int col : cols) { Point k = new Point(col, row); Font v = baseFont.deriveFont(Font.BOLD); cellRendererMap.put(k, v); } } table.updateUI(); } @Override public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { Component c = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column); Point key = new Point(column, row); if (cellRendererMap.containsKey(key)) { Font font = cellRendererMap.get(key); c.setFont(font); } return c; } }
投稿2015/09/03 12:43
編集2015/09/10 22:41総合スコア9388
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2015/09/03 15:18
2015/09/07 12:06
2015/09/07 12:54
2015/09/07 16:16
2015/09/07 16:27
2015/09/08 08:20
2015/09/08 08:50
2015/09/08 15:50
2015/09/08 16:15
2015/09/08 16:32
2015/09/08 16:47
2015/09/08 17:28
2015/09/09 04:18
2015/09/10 16:29 編集
2015/09/10 16:29
2015/09/10 16:30
2015/09/10 16:43
2015/09/10 22:42
2015/09/11 09:51
2015/09/11 10:00
2015/09/11 14:38
2015/09/11 14:48
2015/09/12 15:51
2015/09/12 22:26
2015/09/13 09:01
2015/09/13 09:07
2015/09/13 16:33
2015/09/13 16:58
2015/09/13 17:16
2015/09/14 05:56 編集
2015/09/14 06:06
2015/09/14 06:16 編集
2015/09/14 06:35
2015/09/14 07:13
2015/09/14 07:32
2015/09/14 07:44
2015/09/14 08:50
2015/09/14 09:10
2015/09/15 05:36
2015/09/15 06:35 編集
2015/09/15 08:45
2015/09/15 13:36
2015/09/15 13:55 編集
2015/09/16 12:56 編集
2015/09/16 13:02
2015/09/16 15:15 編集
2015/09/16 15:28
2015/09/16 16:20
2015/09/16 16:27
2015/09/17 04:32
2015/09/17 04:38 編集
2015/09/17 04:42
2015/09/17 05:08
2015/09/17 05:19
2015/09/17 06:26
2015/09/17 16:29
2015/09/18 06:24
2015/09/25 13:42
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2015/09/03 15:04
退会済みユーザー
2015/09/03 15:24
2015/09/07 12:12