JButtonのバックカラーについて

このQ&Aのポイント
  • WinXPでのJButtonのバックカラー変更についての質問
  • Win2000環境では正常にバックカラーが塗られているが、WinXP環境では輪郭部分のみ変更される
  • JTextFieldなどのバックカラーはXPでも正常に表示されているが、ボタンの色は輪郭部分しか変更できないのか
回答を見る
  • ベストアンサー

JButtonのバックカラーについて

質問させてください。 Win2000,JBuilderを使用しています。 この環境で作成したjarファイルをWinXPで起動してUIを確認したところ、 JButtonのバックカラーがボタン全体ではなくボタンの周りの輪郭部分のみ変更されていました。 (jbtn.setBackground(Color.pink) ); Win2000で起動すると正常にボタンのバックカラーが塗られています。 ちなにみJtextFieldなどのバックカラーはXPでも正常に表示されています。 XPではボタンの色は輪郭部分しか変更できないのでしょうか? どなたか詳しい方がいらしたら教えてください。

  • Java
  • 回答数1
  • ありがとう数2

質問者が選んだベストアンサー

  • ベストアンサー
noname#49664
noname#49664
回答No.1

Windows XPでJButtonのsetBackgroundを設定するサンプルを作って動かしてみましたが、背景はすべて別の色で塗られて表示されました。 JBuilderで作ったということでちょっと気になったのですが、UIManager.setLookAndFeelでシステムのLookAndFeelに変更していませんか? この場合、UIクラスの実装によってコンポーネントの表示は変わりますので、OSが変われば表示スタイルも変わります。もしUIManager.setLookAndFeelがあったら、これをコメントアウトして再度動作チェックしてみてください。おそらく問題なく表示されるはずです。  XPではそうなるというのは、XP用のLookAndFeelの実装がそういうスタイルになっている、としかいいようがないです。  これがいやなら、ちょっと面倒ですがJButtonを継承したクラスを作成し、そこでコンポーネントの表示を制御させれるような処理を考えれば良いと思います。またLookAndFeelの実装を自作するという手もありますが、かなり面倒です。

javaTarou
質問者

お礼

LookAndFeelをシステムのLookAndFeelに設定しています。 LokkAndFeelを設定しないか、画面のプロパティでクラシック表示にすると、ボタンカラーは変更されますね。 /*これがいやなら、ちょっと面倒ですがJButtonを継承したクラスを作成し、そこでコンポーネントの表示を制御させれるような処理を考えれば良いと思います。またLookAndFeelの実装を自作するという手もありますが、かなり面倒です。*/ 確かにできそうですが、面倒なのでボタンカラーを変更しないほかの処理を考えます。 とても参考になりました。回答ありがとうございました。

関連するQ&A

  • WinXP JButtonのバックカラーについて

    質問させてください。 XPで以下のように LookAndFeelをセットすると、 new JButton().setBackGround(Color.red); でボタンの背景色が変更できずに、ボタンの輪郭部分の色が変更されてしまいます。 try{ UIManager.setLookAndFeel  UIManager.getSystemLookAndFeelClassName());    } catch(Exception e){ } XPのシステムの設定でしかたなさそうですが、 先ほどの回答していただいた方によると、JButtonを継承したクラスを作成して使えばできそうとあったのですが、 具体的な方法がわかりません。 どなたか詳しい方がいらしましたらたら、クラシック表示にしないで、このLookAndFeelの設定でJButtonの背景色を変更する方法を具体的に教えてください。 よろしくお願いいたします。

  • JavaのJButtonについて。

    JavaのJButtonについて質問です。 ボタンの色をbt.setBackground(new Color(255,127,80));で変更した後、デフォルトのボタンに戻すには、どのように記述すれば良いのでしょうか。 回答お願いします。

  • JButtonの改行したラベルがリロードで消える

    JavaAppletでJbuttonに表示する文字列の改行を実現した サンプルページを参考にボタンを作成し、IE上で表示させたのですが 初期表示は問題なく動作するものの、表示したページを 再読込(リロード)すると、文字が消えてしまいます。 (再読込後の画面コピーを添付します) リロード時にもボタンに表示された文字を表示させるためには ブラウザの設定変更やコードの修正が必要なのでしょうか? 以下は、実行環境及びコードです。 環境 OS:WindowsXP ブラウザ:IE7 JRE:1.6.0_26 ※クラスファイル、HTMLファイルともにCドライブ直下に配置し実行。 ソース ○test.java import java.awt.BorderLayout; import java.awt.Color; import java.awt.Dimension; import javax.swing.JApplet; import javax.swing.JButton; import javax.swing.JPanel; public class test extends JApplet { private static final long serialVersionUID = 1L; JButton button; public void init() { setBackground(Color.WHITE); setLayout(new BorderLayout()); button = new JButton("<html>改行<br />ボタン</html>"); button.setPreferredSize(new Dimension(120,80)); JPanel panel = new JPanel(); panel.setBackground(Color.WHITE); panel.add(button); add(panel, BorderLayout.CENTER); } } ○test.html <html> <head></head> <body> <applet code="test.class" WIDTH=120 HEIGHT=100> </applet> </body> </html>

    • ベストアンサー
    • Java
  • ボタンの背景色について

    先日の質問の返事も書けていないのにすみません。 サンプルも用意する余裕が無かったので 文章での質問となってしまいます。 デフォルトで作成した JButton の背景色を button.setBackground(Color.GRAY); という形で一度色を変更します。 その後にデフォルトで作成したような メタリックなデザインに戻したいときは どうしたら良いのでしょうか? setBackground() ではできませんよね。

    • ベストアンサー
    • Java
  • JavaのSwingのレイアウト

    Swingを学習中ですが、うまくレイアウトできません。 添付した画像のようなレイアウトにしたいです。 作ってみたものは以下です。 import java.awt.BorderLayout; import java.awt.Color; import javax.swing.*; public class LayoutTest { public static void main(String[] args) { JFrame frame = new JFrame(); JPanel panel = new JPanel(); JTextField searchFiled = new JTextField("テキスト"); String[] comboboxString = {"C", "C++", "Java"}; JComboBox comboBox = new JComboBox(comboboxString); JButton button = new JButton("ボタン"); panel.add(comboBox, BorderLayout.EAST); panel.add(searchFiled, BorderLayout.CENTER); panel.add(button, BorderLayout.WEST); frame.add(panel, BorderLayout.PAGE_START); JPanel redPanel = new JPanel(); redPanel.setBackground(Color.RED); frame.add(redPanel); frame.setSize(700, 500); frame.setLocationRelativeTo(null); frame.setVisible(true); } }

    • ベストアンサー
    • Java
  • Java言語のSwingコーポネント「JToggleButton」につ

    Java言語のSwingコーポネント「JToggleButton」について質問です。 選択後のボタンの背景はどうすれば変更できるでしょうか? 選択前のボタンはsetBackGroundで変更できるのですが、ボタンを押すと色が元に戻ってしまいます。 コンストラクタ内でも他のクラスからでも、また選択されていない状態でsetBackGroundを実行しても変わりません。 以下ソースコード public コンストラクタ(){ this.setBackground(Color.YELLOW);//これでも無理 this.setSelected(true); this.setBackground(Color.YELLOW);//これでも無理 this.setIcon(icon); }

    • ベストアンサー
    • Java
  • javaのJTextFieldにマウスフォーカス

    お世話になります。 Q1)下記のコードに於きまして、JTextFieldにマウスフォーカス が当りますと、その旨、System.out.println("JTextField_tt")と表示する方法をお教えください。 import java.awt.BorderLayout; import java.awt.Color; import java.awt.Container; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JTextField; import javax.swing.border.LineBorder; public class EObjectTest extends JFrame implements ActionListener { public static JButton b1; public static JButton b2; public static JTextField tt; static EObjectTest frame; public static void main(String args[]){ frame=new EObjectTest("AAAA"); frame.setVisible(true); } EObjectTest(String title) { setTitle(title); setBounds(100, 100, 300, 250); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); JPanel p = new JPanel(); // ボタン作成・追加 b1 = new JButton("One"); b2 = new JButton("Two"); tt = new JTextField("aaa"); LineBorder border = new LineBorder(Color.RED, 2, true); tt.setBorder(border); tt.setColumns(15); p.add(b1); p.add(b2); p.add(tt); Container contentPane = getContentPane(); contentPane.add(p, BorderLayout.CENTER); // リスナ登録 b1.addActionListener(this); b2.addActionListener(this); tt.addActionListener(this); } public void actionPerformed(ActionEvent e) { // getSource() でイベントソースのオブジェクトを獲得し // Button クラスにキャストする JButton b = (JButton)e.getSource(); // JTextField ttt = (JTextField)e.getSource(); if (b==b1) { System.out.println("Oneのボタン"); } if (b==b2) { System.out.println("Twoのボタン"); } /* if (ttt==tt) { System.out.println("JTextField_tt"); } */ } } 以上

    • ベストアンサー
    • Java
  • javaのGridLayout(..)について

    下記のコードの感じで、GridLayout(3, 16)で、buttonを48個配置していますが、ボタンの縦幅を短く するために、setPreferredSize(new Dimension(43,20));を使用していますが効果が無い様です。 Q1)ボタンの縦幅を短くする方法として、どの様な方法がありますか? 注)この48個のボタンは、southのpaneに配置しており、southのpaneの縦方向の長さを短く してみましたが、効果がありませんでした。 全コードを表示出来なくて御免なさい。 //================================== GridLayout layout = new GridLayout(3, 16); layout.setHgap(2); layout.setVgap(2); p.setLayout(layout); LineBorder border = new LineBorder(Color.BLACK, 1, true); button1=new JButton("dsp_SNIM"); modify_button(button1, border); //button1 SPAN=new JTextField("1"); modify_jtext(SPAN, border); //button2 //=================================== button3=new JButton("Sgl_srt"); modify_button(button3, border); //button3 void modify_button(JButton button, LineBorder border){ button.addActionListener(new TimButton1()); button.setPreferredSize(new Dimension(43,20)); button.setBorder(border); button.setBackground(new Color(0xC0,0xC0,0xC0)); //SILVER; button.setBorderPainted(true); button.setMargin(new Insets(10, 10, 10, 10)); }

    • ベストアンサー
    • Java
  • テキストボックス、ボタンが見えません、画像の影響で

     Java初心者です、宜しくお願いします。  アプレットに画像とテキストボックス、ボタンを張り付ける プログラムを書きましたが、実行すると画像を張り付けているためか、 テキストボックスが指定した大きさに見えず、せいぜい1文字程度の 大きさにしか表示されません。  また、ボタンも実行後には見えない状態で、マウスでクリックする と見えるようになります。  最初から、指定した大きさで、テキストボックス、ボタンを表示させる方法は あるのでしょうか。  また、別のクラスでパネルに色をつけていますが、全く実行されて いないようです。  この原因が分かりません、何故でしょうか。  以上宜しくお願いします。 ======================================================== public class Sample1 extends JApplet { private static final long serialVersionUID = 1L; MediaTracker tracker ; Image img ; Text1 t1 ; public void init() { Container cnt = getContentPane( ); setLayout( null ) ; t1 = new Text1( ) ; t1.init( ) ; cnt.add( t1 ) ; tracker = new MediaTracker( this ) ; img = getImage( getDocumentBase() , "../a.jpg" ) ; tracker.addImage( img , 0 ) ; } public void start() { try { tracker.waitForAll(); } catch (InterruptedException e) { } } public void paint( Graphics g ) { g.drawImage( img , 50 , 50 , 300 , 300 , this ) ; } } //=================================================================== class Text1 extends JPanel { private static final long serialVersionUID = 1L ; JTextField jtf ; public void init( ) { setLayout( null ) ; setBackground( Color.yellow ) ; setBounds( 30 ,30 ,500 , 500 ) ; jtf = new JTextField( "abcde" ) ; jtf.setBounds( 150 , 150 , 100 , 30 ) ; add( jtf ) ; JButton jbt = new JButton( "Check" ) ; jbt.setFont( new Font( "SansSerif" , Font.BOLD , 20 ) ) ; jbt.setBackground( Color.red ) ; jbt.setForeground( Color.blue ) ; jbt.setBounds( 100 , 200 , 220 , 40 ) ; this.add( jbt ) ; } }

    • ベストアンサー
    • Java
  • テキストボックスの値が変数に代入できない(1)

    お早うございます。 java初心者です、宜しくお願いします。 下記のような、アプレットのテキストボックスから値をとり 計算結果を表示するプログラムを書いてやりましたが、 値(実数値)がうまく変数に代入されていません。 この原因が分かりません、どこが悪いのか皆様方のご教示宜しくお願いいたします。 文法上のエラーは出ていません、AWTとswingとの混在は理解は出来ていじますが、それとは別の箇所で原因があると思いますが、解決できません、宜しくお願いいたします。 字数制限で二回の投稿となりますが、宜しくお願いいたします。 ================================================== public class WPCulc extends Applet implements ActionListener { Double Wu , Wd , Wul , Wdl = 0.0 ; Double q , Cwu , Cwd = 0.0 ; Double sita = 0.0 ; Double lon = 0.0 ; Double E , Vo = 0.0 ; Double Er2 , Gf = 0.0 ; Double Zb , Zg , arfa = 0.0 ; public void init() { setLayout(null) ; //一番上の文字 Label lb = new Label("Culc WP"); lb.setFont(new Font("SansSerif",Font.BOLD,20)); lb.setBackground(new Color(0xff9999)); Color c = Color.blue; //カラーを指定 lb.setForeground(c); //ラベルの前景色 lb.setBounds(25 , 40 , 250 ,50) ; add(lb); //longth(延長) Label lb_longth = new Label("L"); lb_longth.setFont(new Font("SansSerif",Font.BOLD,20)); lb_longth.setBackground(new Color(0xff9999)); lb_longth.setBounds(40 ,120 , 30 ,30) ; add(lb_longth) ; //θ Label lb_sita = new Label("θ"); lb_sita.setFont(new Font("SansSerif",Font.BOLD,20)); lb_sita.setBackground(new Color(0xff9999)); lb_sita.setBounds(40 ,160 , 30 ,30) ; add(lb_sita); //Zb Label lb_Zb = new Label("Zb"); lb_Zb.setFont(new Font("SansSerif",Font.BOLD,20)); lb_Zb.setBackground(new Color(0xff9999)); lb_Zb.setBounds(40 , 200 , 30 ,30) ; add(lb_Zb); //Zg Label lb_Zg = new Label("Zg"); lb_Zg.setFont(new Font("SansSerif",Font.BOLD,20)); lb_Zg.setBackground(new Color(0xff9999)); lb_Zg.setBounds(40 , 240 , 30 ,30) ; add(lb_Zg); //arufa Label lb_arfa = new Label("α"); lb_arfa.setFont(new Font("SansSerif",Font.BOLD,20)); lb_arfa.setBackground(new Color(0xff9999)); lb_arfa.setBounds(40 , 280 , 30 ,30) ; add(lb_arfa); lb.setBounds(25 , 40 , 250 ,50) ; //Gf Label lb_Gf = new Label("Gf"); lb_Gf.setFont(new Font("SansSerif",Font.BOLD,20)); lb_Gf.setBackground(new Color(0xff9999)); add(lb_Gf); lb_Gf.setBounds(40 , 320 , 30 ,30) ; //Vo Label lb_Vo = new Label("Vo"); lb_Vo.setFont(new Font("SansSerif",Font.BOLD,20)); lb_Vo.setBackground(new Color(0xff9999)); add(lb_Vo); lb_Vo.setBounds(40 , 360 , 30 ,30) ; //Button(InputDataの確認) Button bt = new Button("InputDataの確認"); bt.addActionListener(this); bt.setFont(new Font("SansSerif",Font.BOLD,20)); Color d = new Color(0xff00ff); //カラーを指定 bt.setBackground(d); //ボタンの背景色 bt.setForeground(new Color(0.0f, 0.0f, 0.0f)); //floatで指定 bt.setBounds(60,430,220,40); add(bt); //TextFieldの始まり(Fieldの作成のみとDataの取得) //InputDataの表示(addせず) TextField tf = new TextField("InputData"); Color e = new Color(255,255,255); //カラーを指定 tf.setBackground(e); Color f = new Color(0,255,0); tf.setForeground(f); tf.setBounds(55,130,180,20); // add(tf); JTextField jta00 = new JTextField("");//long JTextField jta0 = new JTextField("");//sita JTextField jta1 = new JTextField("");//Zb JTextField jta2 = new JTextField("");//Zg JTextField jta3 = new JTextField("");//α JTextField jta4 = new JTextField("");//Gf JTextField jta5 = new JTextField("");//Vo try { lon = Double.parseDouble(jta00.getText()) ; sita = Double.parseDouble(jta0.getText()) ; Zb = Double.parseDouble(jta1.getText()) ; Zg = Double.parseDouble(jta2.getText()) ; arfa = Double.parseDouble(jta3.getText()) ; Gf = Double.parseDouble(jta4.getText()) ; Vo = Double.parseDouble(jta5.getText()) ; }

    • ベストアンサー
    • Java