Как я могу поставить JButton на изображение? - PullRequest
5 голосов
/ 06 мая 2011

Я пытаюсь исправить JFrame, где будет фоновое изображение, а на изображении JButtons, которые будут выполнять некоторые команды. Я пытаюсь сделать это без макета, потому что я хочу поместить маленькие кнопки в определенные места на JFrame, но каждый раз, когда я делаю это, фоновое изображение выходит вперед или размер JFrame равен размеру JFrame. С помощью следующего кода JButton имеет тот же размер, что и JFrame. Я пытался изменить размер и расположение JButton, но ничего. Можете ли вы помочь мне, пожалуйста?

вот код


public final class Test extends JComponent
{
 private Image background;
 private JFrame frame;
 private Dimension dimension;</p>

<pre><code>public Test()
{  
    dimension = new Dimension(15, 15);
    frame = new JFrame("Iphone");
    frame.pack();
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.getContentPane().add(this);
    frame.setBounds(641, 0, 344, 655);
    frame.setVisible(true);

    test = displayButton("tigka");
    frame.getContentPane().add(test);
}

public void update(Graphics g)
{
    paint(g);
}


public void paintComponent(Graphics g)
{
    super.paintComponents(g);
    g.drawImage(background, 0, 25, null); // draw background

// label ();

test = displayButton ("тест"); } общедоступный JButton displayButton (имя строки) { Кнопка JButton = новый JButton (имя); button.setSize (100, 100); button.setPreferredSize (измерение); кнопка возврата; }

Ответы [ 4 ]

7 голосов
/ 06 мая 2011

Вам нужно изменить content pane, чтобы получить фон для вашего Frame.

public static void main(String[] args) throws IOException {

    JFrame frame = new JFrame("Test");

    frame.setContentPane(new JPanel() {
        BufferedImage image = ImageIO.read(new URL("http://upload.wikimedia.org/wikipedia/en/2/24/Lenna.png"));
        public void paintComponent(Graphics g) {
            super.paintComponent(g);
            g.drawImage(image, 0, 0, 300, 300, this);
        }
    });

    frame.add(new JButton("Test Button"));

    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setSize(300, 300);
    frame.setVisible(true);
}

Выход:

screenshot

1 голос
/ 06 мая 2011

Вы должны поменять местами эти две строки:

super.paintComponents(g);  //paints the children, like the button
g.drawImage(background, 0, 25, null); // draw background later possibly overwriting the button

Таким образом, это должен быть следующий порядок:

g.drawImage(background, 0, 25, null);
super.paintComponents(g); 

Кроме того, обратите внимание, что макет панели содержимого по умолчанию - BorderLayout.Таким образом, вы бы явно задали для макета панели содержимого нулевое значение.

1 голос
/ 06 мая 2011

Вы пытались использовать JLabel с HTML в метке?Что-то вроде этого:

import javax.swing.*;

public class SwingImage1
{
  public static void main( String args[] )
  {
    JFrame  frm = new JFrame( "Swing Image 1" );
    JLabel  lbl = new JLabel( "<html><body><img src=\"http://liv.liviutudor.com/images/liv.gif\"></body></html>" );
    frm.getContentPane().add( lbl );
    frm.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
    frm.pack();
    frm.setVisible( true );
  }
}

, а затем в верхней части ярлыка вы можете добавить свою кнопку?

0 голосов
/ 24 июля 2017
/*it is simple to put button on image first set image by making object then make button object & add the button object direct to image object rather then add to frame.*/

package frame;



import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;

public class frame 
{

    public frame() 
    {
        JFrame obj = new JFrame("Banking Software");
        JButton b1 = new JButton("Opening Account");
        JLabel image = new JLabel(new ImageIcon("money.jpg"));
        image.setBounds(0,0, 1600, 1400);
        obj.setExtendedState(JFrame.MAXIMIZED_BOTH);
        obj.add(image);
        b1.setBounds(500,400, 100, 40);
        image.add(b1);
        obj.setVisible(true);
    }

    public static void main(String args[]) 
    {
        new frame();
    }
}
...