質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

解決済

1回答

2451閲覧

JTextAreaで折り返しができない

退会済みユーザー

退会済みユーザー

総合スコア0

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

0グッド

0クリップ

投稿2018/06/23 07:43

編集2018/06/24 08:28

前提・実現したいこと

グッズの管理ツールを作っています。
こんな感じのレイアウトにしたいです。

発生している問題・エラーメッセージ

以下の画像のように長いタイトル等だと折り返しされず、全部表示することができません。

該当のソースコード

Java

1package goods; 2 3import java.awt.Color; 4import java.awt.Dimension; 5import java.awt.Graphics2D; 6import java.awt.Toolkit; 7import java.awt.image.AreaAveragingScaleFilter; 8import java.awt.image.BufferedImage; 9import java.awt.image.FilteredImageSource; 10import java.awt.image.ImageFilter; 11import java.awt.image.ImageProducer; 12import java.io.File; 13import java.io.IOException; 14 15import javax.imageio.ImageIO; 16import javax.swing.BoxLayout; 17import javax.swing.ImageIcon; 18import javax.swing.JLabel; 19import javax.swing.JPanel; 20import javax.swing.JTextArea; 21 22public class Goods extends JPanel { 23 Goods(String imagePass, String title, String goodsName, String person) throws IOException { 24 setLayout(new BoxLayout(this, BoxLayout.Y_AXIS)); 25 JLabel photo; 26 if (imagePass == null) { 27 photo = new JLabel(); 28 } else { 29 System.out.println(imagePass); 30 photo = new JLabel(new ImageIcon(scaleImage(new File(imagePass), 0.5))); 31 } 32 photo.setOpaque(true); 33 photo.setBackground(Color.WHITE); 34 photo.setHorizontalAlignment(JLabel.CENTER); 35 add(photo); 36 JTextArea titleLabel = new JTextArea(title); 37 titleLabel.setMaximumSize(new Dimension( 200, 20)); 38 titleLabel.setEditable(false); 39 titleLabel.setLineWrap(true); 40 add(titleLabel); 41 JTextArea goodsNameLabel = new JTextArea(goodsName); 42 goodsNameLabel.setMaximumSize(new Dimension( 200, 20)); 43 goodsNameLabel.setEditable(false); 44 goodsNameLabel.setLineWrap(true); 45 add(goodsNameLabel); 46 JTextArea personLabel = new JTextArea(person); 47 personLabel.setMaximumSize(new Dimension( 200, 20)); 48 personLabel.setEditable(false); 49 personLabel.setLineWrap(true); 50 add(personLabel); 51 setOpaque(false); 52 } 53 54 public static BufferedImage scaleImage(File in, double scale) throws IOException { 55 BufferedImage org = ImageIO.read(in); 56 ImageFilter filter = new AreaAveragingScaleFilter((int) (org.getWidth() * scale), 57 (int) (org.getHeight() * scale)); 58 ImageProducer p = new FilteredImageSource(org.getSource(), filter); 59 java.awt.Image dstImage = Toolkit.getDefaultToolkit().createImage(p); 60 BufferedImage dst = new BufferedImage(dstImage.getWidth(null), dstImage.getHeight(null), 61 BufferedImage.TYPE_INT_RGB); 62 Graphics2D g = dst.createGraphics(); 63 g.drawImage(dstImage, 0, 0, null); 64 g.dispose(); 65 return dst; 66 } 67} 68

試したこと

以下のサイトを参考にしました。
JLabelの文字列を折り返し - Java Swing Tips

補足情報(FW/ツールのバージョンなど)

  • Java version "1.8.0_40"
  • eclipse Version: Mars.1 Release (4.5.1)

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

以下の画像のように長いタイトル等だと折り返しされず、全部表示することができません。

該当のソースコードには実際の画像や文字列が存在しないので推測ですが、JTextAreaの最大サイズがpersonLabel.setMaximumSize(new Dimension(200, 20));等で設定されているせいかもしれません。

以下、photoラベルのサイズをgetPreferredSize()getMaximumSize()メソッドをオーバーライドして固定し、BoxLayout用にAlignmentXを中央揃えに変更、JTextAreapersonLabel.setMaximumSize(new Dimension(200, 20));などを削除したサンプルです。

スクリーンショット

java

1// package goods; 2import java.awt.*; 3import javax.swing.*; 4 5public class Goods2 extends JPanel { 6 // Goods(String imagePass, String title, String goodsName, String person) throws IOException { 7 public static final int DEFAULT_WIDTH = 100; 8 protected Goods2() { 9 super(); 10 // setLayout(new BoxLayout(this, BoxLayout.Y_AXIS)); 11 12 JLabel photoLabel = makePhotoLabel(); 13 JTextArea titleLabel = makeTextArea("title title title"); 14 JTextArea goodsNameLabel = makeTextArea("goodsName goodsName"); 15 JTextArea personLabel = makeTextArea("person person"); 16 17 Box box = Box.createVerticalBox(); 18 box.add(photoLabel); 19 box.add(Box.createVerticalStrut(2)); 20 box.add(titleLabel); 21 box.add(Box.createVerticalStrut(2)); 22 box.add(goodsNameLabel); 23 box.add(Box.createVerticalStrut(2)); 24 box.add(personLabel); 25 26 add(box); 27 setOpaque(false); 28 } 29 private static JLabel makePhotoLabel() { 30 Icon dummyIcon = UIManager.getIcon("OptionPane.warningIcon"); 31 JLabel photo = new JLabel(dummyIcon) { 32 @Override public Dimension getPreferredSize() { 33 // return new Dimension(dummyIcon.getIconWidth(), dummyIcon.getIconHeight()); 34 return new Dimension(DEFAULT_WIDTH, DEFAULT_WIDTH); 35 } 36 @Override public Dimension getMaximumSize() { 37 return getPreferredSize(); 38 } 39 }; 40 photo.setOpaque(true); 41 photo.setBackground(Color.WHITE); 42 photo.setHorizontalAlignment(JLabel.CENTER); 43 photo.setAlignmentX(Component.CENTER_ALIGNMENT); 44 photo.setBorder(BorderFactory.createLineBorder(Color.GRAY)); 45 return photo; 46 } 47 private static JTextArea makeTextArea(String str) { 48 JTextArea textArea = new JTextArea(str); 49 textArea.setEditable(false); 50 textArea.setLineWrap(true); 51 textArea.setBorder(BorderFactory.createLineBorder(Color.GRAY)); 52 // textArea.setAlignmentX(Component.CENTER_ALIGNMENT); 53 return textArea; 54 } 55 public static void main(String[] args) { 56 EventQueue.invokeLater(() -> { 57 JFrame f = new JFrame(); 58 f.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); 59 f.getContentPane().add(new Goods2()); 60 f.setSize(200, 240); 61 f.setLocationRelativeTo(null); 62 f.setVisible(true); 63 }); 64 } 65} 66

投稿2018/06/25 09:48

aterai

総合スコア158

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2018/06/26 17:18

表示の折り返しはできました。ありがとうございました。 幅が広げたいのですがどうしたら良いでしょうか? (GridLayoutを使用して並べています)
aterai

2018/06/28 12:47

どこの幅でしょうか? BoxLayoutならphotoラベルの幅(このサンプルならDEFAULT_WIDTH)を変更するとすべての幅が変更できますが、GridLayout?がどこに使用されているのか分からないので回答は難しいです。
退会済みユーザー

退会済みユーザー

2018/07/01 04:17

できました。ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問