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

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

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

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

Javaアプレット

Javaアプレットは、Webページに組み込まれて実行されるJavaアプリケーションの形式です。Java SE 11で廃止となりました。

Q&A

解決済

1回答

536閲覧

jlabelの"Nova Music Player"をグラデーションしたいのです!

novaEX

総合スコア3

Java

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

Javaアプレット

Javaアプレットは、Webページに組み込まれて実行されるJavaアプリケーションの形式です。Java SE 11で廃止となりました。

0グッド

0クリップ

投稿2020/07/31 12:26

編集2020/07/31 13:00

前提・実現したいこと

以下のコードをどうすればできますか?やり方を教えてください?

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

エラーメッセージ

該当のソースコード

package MusicPlayer; import java.awt.Color; import java.awt.EventQueue; import java.awt.Font; import java.awt.GridLayout; import java.awt.SystemColor; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JMenu; import javax.swing.JMenuBar; import javax.swing.JMenuItem; import java.awt.BorderLayout; import java.applet.Applet; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.GradientPaint; import java.awt.Point; import java.awt.Dimension; public class GUI { private JFrame frmNovaMusicPlayer; private JLabel lblNovaMusicPlayer; private JMenuBar menuBar; private JMenu menu; private JMenuItem menuItem; /** * Launch the application. */ public static void main(String[] args) { EventQueue.invokeLater(new Runnable() { public void run() { try { GUI window = new GUI(); window.frmNovaMusicPlayer.setVisible(true); } catch (Exception e) { e.printStackTrace(); } } }); } /** * Create the application. */ public GUI() { initialize(); } /** * Initialize the contents of the frame. */ private void initialize() { frmNovaMusicPlayer = new JFrame(); frmNovaMusicPlayer.setBackground(SystemColor.textHighlight); frmNovaMusicPlayer.setTitle("Nova Music Player"); frmNovaMusicPlayer.setBounds(100, 100, 854, 450); frmNovaMusicPlayer.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frmNovaMusicPlayer.getContentPane().setLayout(new BorderLayout(0, 0)); menuBar = new JMenuBar(); menuBar.setBorderPainted(false); menuBar.setBackground(new Color(255, 255, 255)); menuBar.setFont(new Font("Yu Gothic UI", Font.PLAIN, 12)); frmNovaMusicPlayer.getContentPane().add(menuBar, BorderLayout.NORTH); menu = new JMenu("ファイル"); menuBar.add(menu); JMenuItem menuItem_1 = new JMenuItem("音楽ファイルを開く"); menu.add(menuItem_1); lblNovaMusicPlayer = new JLabel("Nova Music Player"); lblNovaMusicPlayer.setToolTipText(""); lblNovaMusicPlayer.setForeground(new Color(0, 255, 0)); lblNovaMusicPlayer.setFont(new Font("源界明朝", Font.PLAIN, 80)); lblNovaMusicPlayer.setBackground(Color.WHITE); frmNovaMusicPlayer.getContentPane().add(lblNovaMusicPlayer); } public void paintComponent(Graphics g) { final Graphics2D g2 = (Graphics2D) g.create(); g2.setPaint(new GradientPaint( new Point(0, 0), Color.WHITE, new Point(0, getHeight()), Color.PINK.darker())); g2.fillRect(0, 0, getWidth(), getHeight()); g2.dispose(); } }

試したこと

ここに問題に対して試したことを記載してください。

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

ここにより詳細な情報を記載してください。

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

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

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

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

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

guest

回答1

0

ベストアンサー

絶対もっと簡単にできると思う^^;

Java

1package MusicPlayer; 2 3import java.awt.BorderLayout; 4import java.awt.Color; 5import java.awt.EventQueue; 6import java.awt.Font; 7import java.awt.FontMetrics; 8import java.awt.GradientPaint; 9import java.awt.Graphics; 10import java.awt.Graphics2D; 11import java.awt.Point; 12import java.awt.Rectangle; 13import java.awt.SystemColor; 14import javax.swing.JFrame; 15import javax.swing.JLabel; 16import javax.swing.JMenu; 17import javax.swing.JMenuBar; 18import javax.swing.JMenuItem; 19import javax.swing.SwingUtilities; 20 21public class GUI { 22 23 private JFrame frmNovaMusicPlayer; 24 private JLabel lblNovaMusicPlayer; 25 private JMenuBar menuBar; 26 private JMenu menu; 27 private JMenuItem menuItem; 28 29 /** 30 * Launch the application. 31 */ 32 public static void main(String[] args) { 33 EventQueue.invokeLater(new Runnable() { 34 public void run() { 35 try { 36 GUI window = new GUI(); 37 window.frmNovaMusicPlayer.setVisible(true); 38 } catch (Exception e) { 39 e.printStackTrace(); 40 } 41 } 42 }); 43 } 44 45 /** 46 * Create the application. 47 */ 48 public GUI() { 49 initialize(); 50 } 51 52 /** 53 * Initialize the contents of the frame. 54 */ 55 private void initialize() { 56 frmNovaMusicPlayer = new JFrame(); 57 frmNovaMusicPlayer.setBackground(SystemColor.textHighlight); 58 frmNovaMusicPlayer.setTitle("Nova Music Player"); 59 frmNovaMusicPlayer.setBounds(100, 100, 854, 450); 60 frmNovaMusicPlayer.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 61 frmNovaMusicPlayer.getContentPane().setLayout(new BorderLayout(0, 0)); 62 63 menuBar = new JMenuBar(); 64 menuBar.setBorderPainted(false); 65 menuBar.setBackground(new Color(255, 255, 255)); 66 menuBar.setFont(new Font("Yu Gothic UI", Font.PLAIN, 12)); 67 frmNovaMusicPlayer.getContentPane().add(menuBar, BorderLayout.NORTH); 68 69 menu = new JMenu("ファイル"); 70 menuBar.add(menu); 71 72 JMenuItem menuItem_1 = new JMenuItem("音楽ファイルを開く"); 73 menu.add(menuItem_1); 74 75 lblNovaMusicPlayer = new JLabel("Nova Music Player") { 76 @Override 77 public void paintComponent(Graphics g) { 78 final Graphics2D g2 = (Graphics2D) g.create(); 79 g2.setFont(getFont()); 80 81 Rectangle viewR = new Rectangle(); 82 viewR.width = getSize().width; 83 viewR.height = getSize().height; 84 Rectangle iconR = new Rectangle(); 85 Rectangle textR = new Rectangle(); 86 SwingUtilities.layoutCompoundLabel(this, g2.getFontMetrics(), 87 getText(), getIcon(), 88 getVerticalAlignment(), getHorizontalAlignment(), 89 getVerticalTextPosition(), getHorizontalTextPosition(), 90 viewR, iconR, textR, getIconTextGap()); 91 92 FontMetrics fm = g2.getFontMetrics(); 93 94 g2.setPaint(new GradientPaint(new Point(textR.x, textR.y), Color.WHITE, 95 new Point(textR.x, textR.y + textR.height), Color.PINK.darker())); 96 97 g2.drawString(getText(), textR.x, textR.y + fm.getMaxAscent()); 98 g2.dispose(); 99 } 100 }; 101 lblNovaMusicPlayer.setToolTipText(""); 102 lblNovaMusicPlayer.setForeground(new Color(0, 255, 0)); 103 lblNovaMusicPlayer.setFont(new Font("源界明朝", Font.PLAIN, 80)); 104 lblNovaMusicPlayer.setBackground(Color.WHITE); 105 frmNovaMusicPlayer.getContentPane().add(lblNovaMusicPlayer); 106 } 107}

追記 普通のクラス

Java

1import java.awt.Color; 2import java.awt.EventQueue; 3import java.awt.Font; 4import java.awt.FontMetrics; 5import java.awt.GradientPaint; 6import java.awt.Graphics; 7import java.awt.Graphics2D; 8import java.awt.Point; 9import java.awt.Rectangle; 10import java.awt.SystemColor; 11import javax.swing.JFrame; 12import javax.swing.JLabel; 13import javax.swing.SwingUtilities; 14 15 16// JFrameを継承してこのアプリ用にカスタマイズしたGUIクラスを作る 17public class GUI extends JFrame { 18 public static void main(String[] args) { 19 EventQueue.invokeLater(new Runnable() { // ここも匿名クラスです 20 public void run() { 21 try { 22 GUI window = new GUI(); 23 window.setVisible(true); 24 } catch (Exception e) { 25 e.printStackTrace(); 26 } 27 } 28 }); 29 } 30 31 public GUI() { 32 // このアプリ専用のいろんなカスタマイズ 33 setBackground(SystemColor.textHighlight); 34 setTitle("Nova Music Player"); 35 setBounds(100, 100, 854, 450); 36 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 37 38 // GradationLabelはJLabelの機能は当然全部持っているので、JLabel変数に入れても問題ない 39 JLabel lbl = new GradationLabel("Nova Music Player"); 40 lbl.setToolTipText(""); 41 lbl.setForeground(new Color(0, 255, 0)); 42 lbl.setFont(new Font("源界明朝", Font.PLAIN, 80)); 43 lbl.setBackground(Color.WHITE); 44 45 add(lbl); 46 } 47} 48 49// JLabelを継承してグラデーションのテキストを表示するラベルに改造 50// でもほとんどの機能はJLabelに任せる 51class GradationLabel extends JLabel { 52 public GradationLabel(String text) { 53 super(text); 54 } 55 56 // paintComponent(表示するところ)だけをグラデーションするロジックに置き換える 57 @Override 58 public void paintComponent(Graphics g) { 59 final Graphics2D g2 = (Graphics2D) g.create(); 60 g2.setFont(getFont()); 61 62 Rectangle viewR = new Rectangle(); 63 viewR.width = getSize().width; 64 viewR.height = getSize().height; 65 Rectangle iconR = new Rectangle(); 66 Rectangle textR = new Rectangle(); 67 SwingUtilities.layoutCompoundLabel(this, g2.getFontMetrics(), 68 getText(), getIcon(), 69 getVerticalAlignment(), getHorizontalAlignment(), 70 getVerticalTextPosition(), getHorizontalTextPosition(), 71 viewR, iconR, textR, getIconTextGap()); 72 73 FontMetrics fm = g2.getFontMetrics(); 74 75 g2.setPaint(new GradientPaint(new Point(textR.x, textR.y), Color.WHITE, 76 new Point(textR.x, textR.y + textR.height), Color.PINK.darker())); 77 78 g2.drawString(getText(), textR.x, textR.y + fm.getMaxAscent()); 79 g2.dispose(); 80 } 81}

投稿2020/07/31 13:13

編集2020/08/01 10:29
TN8001

総合スコア9309

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

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

novaEX

2020/07/31 13:29

やってみたら、グラデーション自体はwindow背景にできていて 文字列にはありませんでした。
TN8001

2020/07/31 13:33

ラベルの背景だけでなく文字もグラデーションするんですか? 何色で? 同化しちゃいませんか??
TN8001

2020/07/31 13:34

あ、文字をグラデーションしたいってことですか?
novaEX

2020/07/31 13:39

いえ、ラベルの背景」をグラデーションするんじゃないんです。文字そのものをするんです。
TN8001

2020/07/31 13:42

なるほどそういうコードに見えなかったので勘違いしました。 ちょっと調べてみますね。
novaEX

2020/07/31 13:42

有難うございます!
TN8001

2020/07/31 15:28

全然位置が合わなくて手間取りました^^;
novaEX

2020/07/31 16:07

えっと、appletのgraphicsを使う感じですか? それとも別のですか?
TN8001

2020/07/31 16:26

appletのgraphics?? novaEXさんの質問コードには import java.applet.Applet; が入ってますが使われていません。 私が追加したのは import java.awt.FontMetrics; import java.awt.Rectangle; import javax.swing.SwingUtilities; だけです。 全文上げたほうがいいですか?
TN8001

2020/07/31 16:41 編集

削除
novaEX

2020/07/31 21:39

有難うございます!グラデーションに成功しました! あの、なぜlabelを定義する文の後に{};と来るのですか?
TN8001

2020/08/01 01:33

JLabelを継承し新しいクラスを作っています。 JLabelのpaintComponentの動作を変えたいですからね。 詳しくは「Java 匿名クラス」で検索してください^^
novaEX

2020/08/01 09:23

やっぱ、理解するのが難しいですね。まあイメージとしては関数を定義すると同時に、他の関数が動作感じでいいですかね?
novaEX

2020/08/01 09:24

JLabelにグラデーションがつけられているのはsuperのおかげ、 jlabelが親で、graphicsは子みたいなだからかな?
TN8001

2020/08/01 10:30

> やっぱ、理解するのが難しいですね。 そんなに難しく考えないでもいいと思います。 よく「くるま」クラスから「スーパーカー」クラスや「トラック」クラスを作るみたいな説明がありますが、今回のは自分専用にちょっと改造するって程度です。 (paintComponentの中の処理が難しいのはその通りです^^; > グラデーションがつけられているのはsuperのおかげ グラデーションはpaintComponentの中の処理のおかげです super(JLabel)のおかげなところは表示するテキストやフォントの管理等ですかね。 匿名クラスは楽に書けるようにある機能なので、別に使わなくても問題はないです。 普通のクラスを使った例を追記しました。(ついでにJFrameも継承してみました)
novaEX

2020/08/01 11:37

public GradationLabel(String text) { super(text); } というのはGradationLabel という名前の関数ですか? それとも、GradationLabelクラスですか?
TN8001

2020/08/01 11:52

GradationLabelクラスのコンストラクタです。 new GradationLabel("Nova Music Player") ってやったときに呼ばれる部分です。 つまりString textは"Nova Music Player"が入っています。 それをsuper(JLabel)のコンストラクタにそのまま渡します。 するとあとでgetText()とすると"Nova Music Player"が返ってきます。
novaEX

2020/08/01 13:43

class GradationLabel extends JLabel { のGradationLabelもそういう名前のではなくちゃんとした名前のクラスですか?
TN8001

2020/08/01 13:49

ちゃんとしてるかはわかりませんが、 私がつけた名前です。 HogeLabelでもGLabelでもいいのです。 class GUIとおなじです。
novaEX

2020/08/02 08:53

public GradationLabel(String text) { super(text); } GradationLabel label = new GradationLabel的なのってことですか?
TN8001

2020/08/02 09:56

そのとおりです。
novaEX

2020/08/02 10:15

でも一回 Jlabel label = new GradationLabel(); 的な感じで前のほうでも一回宣言してますけどそれは何なんですか?
TN8001

2020/08/02 10:37

質問コードのclass GUIと違いはないのです。 質問コードのclass GUIと回答コードのclass GradationLabelを比べます。 public class GUI { と class GradationLabel extends JLabel { public GUI() { と public GradationLabel(String text) { GUI window = new GUI(); と JLabel lbl = new GradationLabel("Nova Music Player"); がそれぞれ対応します。 2020/08/02 17:53のコメントの解釈がわたしとnovaEXさんで違っているっぽいです。 どこが腑に落ちないのかがわからないんですが、もう少し詳しく書けますか? もしくは新しく質問を立ててもいいかもしれません。
novaEX

2020/08/02 10:45

つまりGradationLabelクラスのコンストラクタをいじることと同じですね!
TN8001

2020/08/02 10:55

なるほどsuperに引っかかっていたのですね。 今回の例では public GradationLabel(String text) { //super(text); setText(text); } と書いても同じです。
novaEX

2020/08/02 11:02

GradationLabelをtextにsettextするんですか?
TN8001

2020/08/02 11:23

余計なことを言っちゃったかな?^^; JLabelでsetTextとすると表示される文字を変えることができるのはいいですね? JLabel lbl=new JLabel("Nova Music Player"); は、 JLabel lbl=new JLabel(); lbl.setText("Nova Music Player"); と書いても結果は同じです。 上はコンストラクタで文字列を渡しています。 下はコンストラクタに何も渡していませんが、setTextで文字列を渡します。 結果的にはどちらも"Nova Music Player"が表示されます。 なぜかというとJLabelはコンストラクタで文字列を渡すと中でsetTextしているからです。 GradationLabelは引数なしのコンストラクタを用意しなかったので、上の書き方はできませんが作ればできるようになります(ノイズになるので書きませんでした)
novaEX

2020/08/02 11:38

public GradationLabel(String text) { super(text); } と JLabel lbl = new GradationLabel("Nova Music Player"); は同じということですね。
TN8001

2020/08/02 11:53

まあ。。そうですね^^; Javaをやる以上クラスは避けて通れないですから、何か気になったら入門書等で確認してもらうのがいいですね^^
novaEX

2020/08/02 12:03

@Override public void paintComponent(Graphics g) { final Graphics2D g2 = (Graphics2D) g.create(); g2.setFont(getFont()); Rectangle viewR = new Rectangle(); viewR.width = getSize().width; viewR.height = getSize().height; Rectangle iconR = new Rectangle(); Rectangle textR = new Rectangle(); SwingUtilities.layoutCompoundLabel(this, g2.getFontMetrics(), getText(), getIcon(), getVerticalAlignment(), getHorizontalAlignment(), getVerticalTextPosition(), getHorizontalTextPosition(), viewR, iconR, textR, getIconTextGap()); FontMetrics fm = g2.getFontMetrics(); g2.setPaint(new GradientPaint(new Point(textR.x, textR.y), Color.WHITE, new Point(textR.x, textR.y + textR.height), Color.PINK.darker())); g2.drawString(getText(), textR.x, textR.y + fm.getMaxAscent()); g2.dispose(); }の部分はどこの部分でlabelと関連付けているのですか?
shiketa

2020/08/02 12:48

> ですか? labelですか? lblならここかと。`JLabel lbl = new GradationLabel("Nova Music Player");`
TN8001

2020/08/02 13:27

> どこの部分でlabelと関連付けているのですか? コンストラクタがあるとややこしくなるんで省略しますが、 class GradationLabel extends JLabel {   @Override   public void paintComponent(Graphics g) { // paintComponentメソッド    // なんたら   } } という構造ですよね。もうこの時点で関連付けられているわけです。 GradationLabel lbl = new GradationLabel("Nova Music Player"); とGradationLabel型のインスタンスlblを作れば、 lbl.paintComponent(null)とすれば、呼び出せはしますがnullだとエラーが出るでしょう^^; paintComponentは私たちが呼ぶことはまずありません。 Swingが必要になったときに適切に呼び出します(そういう風に作ってあるから) 具体的には window.setVisible(true); した後何段階かの処理を経て呼び出されているはずです。 「はず」というのは私も詳しいことは知らないからです。 しかし「paintComponentを書き換えると表示内容をカスタマイズできます」という約束さえ知っていればいいのです。
novaEX

2020/08/02 13:57

public GradationLabel(String text) { super(text); } に反応してきた感じですか?
TN8001

2020/08/02 14:36

疑問には答えたいのですが、残念ながらどういう意味かさっぱりわかりません。 https://teratail.com/questions/116473#reply-177137 https://teratail.com/questions/21119#reply-33185 上記回答で入門サイトや本の紹介があります(かなりかぶっていますが) 例えばそのうちの一つ [7-1. オブジェクト指向とは - マンガで分かる Java入門講座 - マンガPG](https://manga.crocro.com/?cat=java&pg=object_oriented から38ページくらいがクラスの説明です。 少なくとも私がコメントで説明するより100倍わかりやすいと思います^^;
novaEX

2020/08/03 10:21

つまり、public GradationLabel(String text) { super(text); } の後ろにgraphics2dを必ず書かなければならないかということです。
TN8001

2020/08/03 10:42

class GradationLabel extends JLabel {   public GradationLabel(String text) { 省略 }   public void paintComponent(Graphics g) {省略 } } public GradationLabel(String text) { } は、 GradationLabelクラスのコンストラクタです。 public void paintComponent(Graphics g) { } は、 GradationLabelクラスのメソッドです。 どちらも class GradationLabel の中に入っていれば順番は問いません。 final Graphics2D g2 は、 paintComponentメソッドのローカル変数です。 paintComponentメソッドの中にないと意味がありません。 > (コンストラクタ)の後ろにgraphics2dを必ず書かなければならない ちょっと意味が分かりません。 リンク先読んでも腑に落ちなかったですか?
novaEX

2020/08/04 04:02

extend Jlabelと書いてあるから、 public void paintComponent(Graphics g) { } は、 GradationLabelクラスのメソッドということになるのですか?
TN8001

2020/08/04 09:01

メソッドかどうかに extends は関係ありません。 class GradationLabel { ここ } のかっこの中に入っているから paintComponent は GradationLabelクラスのメソッドです。 先のリンクでいうとここです。 [7-6. クラスの構造 - マンガで分かる Java入門講座 - マンガPG](https://manga.crocro.com/?cat=java&pg=class_structure extends JLabel が必要なのは、 * frame.getContentPane().add(lbl) と addできるようにする * paintComponentを適切に呼び出してもらう ためです。 --- 気軽に「中に」と書いてしまいましたが、もしかして「中に」の意味が通じていませんか? 開きカッコと閉じカッコの組があった場合、挟まれた部分を中に入っていると言います。 開きカッコとは 「([{ 等 閉じカッコとは 」)]} 等 クラスやメソッドの場合、波カッコ{} の組が区切りになります。 カッコの組の「中に」カッコの組が入る場合もありますが、その場合見やすいように字下げをします。 {   {     {     }   } } もし↑を「あーなるほど」と思うんだったら、入門書を買って読んでください。 さすがにこの質問に対してそこから説明していられません。 一般的なクラスやメソッドについての疑問でしたら、新たに質問を立ててください。
novaEX

2020/08/04 09:18

あ、いえ、そういう意味じゃないんです。 extends Jlabelと書いてあるから、 GradationLabelにpaintComponent内の メソッドが適用されて グラデーションされた文字ができるんじゃないかということです。
TN8001

2020/08/04 09:33

そうですその通りです(よかったですゼロから説明がいるかと思いました^^; > extends JLabel が必要なのは、 > * paintComponentを適切に呼び出してもらう > ためです。 というところです。 > 「まだ回答を求めています」 というのは > 絶対もっと簡単にできると思う^^; に対しての意味ですよね?(できたけどもうちょっと簡単にならないかな?って意味)
novaEX

2020/08/04 09:50

そうですね、かなり大変でしたね。 では、class GUIに extends JLabelがついていれば、 class GUIの中に paintComponentメソッドがあっても 同じ結果になるということですか?
TN8001

2020/08/04 10:20

まあそうですね。 mainがあるクラスを extends JLabel とすることは普通はしないです(extends JFrame や extends JPanel が多いです)が、extends JLabel して paintComponent をclass GUI に含めることは可能です。 その際は lblNovaMusicPlayer = new JLabel("Nova Music Player"); の代わりに lblNovaMusicPlayer = this; lblNovaMusicPlayer.setText("Nova Music Player"); のような修正が必要です(もちろん paintComponent も移したうえで)
novaEX

2020/08/04 10:29

extends JLabelでJlabelにpaintComponentが適用されますが ここで、jlabelが複数あったとするとどうでしょうか? それはすべてに適用されるんでしょうか?
TN8001

2020/08/04 10:38

ラベルが複数ある=GUIクラスのインスタンスが複数ある となると initialize() が何回も実行されておかしなことになりますよね? もちろん何とかする方法もありますが、 class GradationLabel extends JLabel { } になっていたほうがわかりやすいと思いませんか? (GUIクラスはアプリ全体の担当 GradationLabelクラスはグラデーションラベルの担当)
novaEX

2020/08/04 10:45

いえ、Nova Music Playerのほかにも またある文字を設定して、そのある文字にもグラデーションを設定するならどうなるかということです。
TN8001

2020/08/04 10:49

class GradationLabel を作っていれば lblNovaMusicPlayer と同じように lbl2 = new GradationLabel("なんたら"); ってするだけですよ^^
novaEX

2020/08/04 10:52

public GradationLabel(String text) { super(text); } なくても、extends jlabelがあるからいけるんじゃないですか?
TN8001

2020/08/04 11:00

ちょっとまた認識がずれてきてる気がします。 「ラベルが複数ある」ってのはあってますか? 「paintComponentをどうしてもGUIに書きたい」ってのもあってますか? 「何とかする方法」を見てみる必要はありますか?
novaEX

2020/08/04 11:11

public GradationLabel(String text) { super(text); } があるのは、jlabelのどの文字に適用するか指定するためにあるってことですか。 "AAA"にグラデーションを適用し、"BBB"には適用しないみたいな
TN8001

2020/08/04 11:20

new GradationLabel("AAA BBB"); としたら"AAA BBB"が一緒にグラデーションしますし、フォントやサイズも同じになります。 "Nova Music Player"としてたのだからそこはいいですよね?? グラデーションしたくなければ 別の JLabel を追加することになるでしょう。
novaEX

2020/08/04 11:48

以上のサイトのurl先のページのソースコードについてです。
TN8001

2020/08/04 11:50 編集

public GradationLabel(String text){} が引っかかっているのですか? ならば public GradationLabel(String text) {   super(text); } は消してもいいです。 そのかわり lblNovaMusicPlayer = new GradationLabel(); lblNovaMusicPlayer.setText("Nova Music Player"); になるだけです。
novaEX

2020/08/04 11:52

もうそれの方が分かりやすいです!有難うございます!
TN8001

2020/08/04 11:56

なによりです^^
novaEX

2020/08/04 12:03

しかしsettextではなくgradationlabelを定義する() の中に書いちゃダメなんですか?
TN8001

2020/08/04 12:14

"Nova Music Player"しか使わないんならそれでもいいですけど。 SwingUtilities.layoutCompoundLabel(this, g2.getFontMetrics(), "Nova Music Player", と g2.drawString("Nova Music Player", 2か所ありますね。 paintComponent の中で setText("Nova Music Player"); としても間違いではないですが、何回も呼ばれるところなので違和感はあります。 それだったら public GradationLabel() { setText("Nova Music Player"); } とコンストラクタを作りたいです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問