3
    import java.awt.*;
    import java.awt.image.*;
    import java.awt.event.*;
    import javax.imageio.*;
    import java.lang.*;
    import java.io.*;
    import javax.swing.*;
    public class MainClass extends Component{
       private Image bg;
       private ImageIcon newgame;
       private ImageIcon quit;
       private ImageIcon options;
       private JButton bquit;
       private JButton boptions;
       private JButton bnewgame;
       private static Container pane; //Container

    public void loadImage() {
        try {
            bg=ImageIO.read(new File("bg1.png"));
        } catch (Exception e) {
        }
        if(bg!=null)
            repaint();

    }
    public void paint(Graphics g) {
        g.drawImage(bg,0,0,null);
    }
    public void imageButtons(JFrame f) {
        try {
            quit= new ImageIcon("quit.png");
            options=new ImageIcon("options.png");
            newgame= new ImageIcon("newgame.png");
        }catch(Exception e){}    
        bnewgame= new JButton(newgame);
        boptions= new JButton(options);
        bquit= new JButton(quit);
        bnewgame.setBounds(150,100,400,89);
        boptions.setBounds(150,200,400,89);
        bquit.setBounds(150,300,400,89);
        pane.add(bquit);
        pane.add(boptions);
        pane.add(bnewgame);
    }   


    public static void main(String args[]) {

        MainClass o=new MainClass();    
        FullScreen fs=new FullScreen(); 
        JFrame f1=new JFrame("TITLE");
        pane=f1.getContentPane();
        fs.fullScreenIt(f1);
        pane.add(o);
        f1.setVisible(true);
        o.loadImage();
        o.imageButtons(f1);
    }
}

フルスクリーンは、フルスクリーンフレームを提供する別のクラスです。JButtonにはImageIconがあります。bg1.pngは背景画像 です問題は、これらのJButtonがマウスをホバーしたときにのみ表示され、それ以外の場合は表示されないことです。

4

4 に答える 4

7

AWTまたはSwingJComponentsの代わりに、 Icon/ImageIconをJButtonに直接追加しますpaint()paintComponent()

Contructor JButton(Icon)はIconまたはImageIconを知っています

ここに画像の説明を入力してください

コードから

import java.awt.*;
import javax.swing.*;

public class ButtonsIcon extends JFrame {

    private static final long serialVersionUID = 1L;
    private ImageIcon errorIcon = (ImageIcon) UIManager.getIcon("OptionPane.errorIcon");
    private Icon infoIcon =  UIManager.getIcon("OptionPane.informationIcon");
    private Icon warnIcon =  UIManager.getIcon("OptionPane.warningIcon");

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {

            @Override
            public void run() {
                ButtonsIcon t = new ButtonsIcon();
            }
        });
    }

    public ButtonsIcon() {
        setLayout(new GridLayout(0, 2, 4, 4));

        JButton button = new JButton();
        button.setBorderPainted(false);
        button.setBorder(null);
        button.setFocusable(false);
        button.setMargin(new Insets(0, 0, 0, 0));
        button.setContentAreaFilled(false);
        button.setIcon((errorIcon));
        button.setRolloverIcon((infoIcon));
        button.setPressedIcon(warnIcon);
        button.setDisabledIcon(warnIcon);
        add(button);

        JButton button1 = new JButton();
        button1.setBorderPainted(false);
        button1.setBorder(null);
        button1.setFocusable(false);
        button1.setMargin(new Insets(0, 0, 0, 0));
        button1.setContentAreaFilled(false);
        button1.setIcon((errorIcon));
        button1.setRolloverIcon((infoIcon));
        button1.setPressedIcon(warnIcon);
        button1.setDisabledIcon(warnIcon);
        add(button1);
        button1.setEnabled(false);

        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        pack();
        setVisible(true);
    }
}
于 2011-10-27T16:36:59.537 に答える
5

null以外のレイアウトマネージャーを使用するコンテナーに絶対境界を持つJButtonを追加しようとしているレイアウトの問題がある可能性があります。提案

  • コンポーネントのサイズと配置にsetBoundsと絶対位置を使用しないでください。
  • 読み進めて、レイアウトマネージャーを使用して、この手間のかかる作業を行ってください。レッスン:コンテナー内のコンポーネントのレイアウト
  • pack()すべてのコンポーネントを追加した後、JFrameを呼び出すことを忘れないでください
  • 呼び出しsetVisible(true)後に呼び出し、GUIにすべてのコンポーネントを追加した後にのみ両方pack()を再度呼び出します。
  • コンポーネントの絶対配置を絶対に使用する必要がある場合は、ヌルレイアウトを使用できますが、それでも、使用しないように努める必要があります。
于 2011-10-27T16:16:31.263 に答える
3

ボタンを追加した後は、塗り直しをしていないようです。

あなたがそれらを追加した後、私はそこに再ペイントを追加します。

于 2011-10-27T16:16:11.910 に答える
1

同様の問題がありました...

グリッチは、paint()メソッドをオーバーライドすることによって引き起こされると思います。デフォルトのpaint()メソッドは、すべてのコンポーネントでrepaint()を自動的に呼び出しますが、paint()メソッドをオーバーライドすることにより、コンポーネントの再ペイントが停止します。したがって、解決策は、オーバーライドされたpaint()メソッド内のすべてのコンポーネントでrepaint()を呼び出すことです。

私のために働いた、それが他の人のために働くことを願っています;)。

于 2014-05-25T22:12:14.877 に答える