Кнопка заполнения всего экрана в Swing GUI - PullRequest
0 голосов
/ 19 января 2020

Код Java ниже должен просто разместить изображение и кнопку. Сейчас этот код компилируется, но кнопка - единственное, что отображается. Я не могу видеть изображение. Я хочу, чтобы изображение занимало 90 процентов экрана, а кнопка - для остальных 10 процентов экрана.

 import java.awt.BorderLayout;
 import java.io.IOException;
 import java.net.URL;
 import javax.swing.ImageIcon;
import javax.swing.JFrame;
 import javax.swing.JLabel;
 import javax.swing.JTextField;
 import javax.swing.JButton;

 class Main extends JFrame {

public static void main(String[] args0) {
    try {
        JFrame frame = new JFrame();
        frame.setDefaultCloseOperation(EXIT_ON_CLOSE);

        URL url = new URL("http://www.digitalphotoartistry.com/rose1.jpg");
        ImageIcon image= new ImageIcon(url);
        JLabel imageLabel = new JLabel(image);
        frame.add(imageLabel);      

      JButton b=new JButton("Click Here");  
      frame.add(b); 
      b.setBounds(50,100,95,30);  
      b.add.setSize(400,400);  

        frame.pack();
        frame.setVisible(true);
    } catch (IOException e) {
        e.printStackTrace();
    }
}}

1 Ответ

0 голосов
/ 19 января 2020

Начните с прочтения Размещение компонентов внутри контейнера и Как использовать BorderLayout , который является макетом по умолчанию, используемым JFrame

I рассмотрит возможность использования GridBagLayout вместо (в качестве отправной точки), например ...

import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.io.IOException;
import java.net.URL;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;

class Main extends JFrame {

    public static void main(String[] args0) {

        try {
            JFrame frame = new JFrame();
            frame.setDefaultCloseOperation(EXIT_ON_CLOSE);

            frame.getContentPane().setLayout(new GridBagLayout());

            GridBagConstraints gbc = new GridBagConstraints();
            gbc.gridwidth = GridBagConstraints.REMAINDER;
            gbc.weightx = 0.9;
            gbc.weighty = 0.9;
            gbc.fill = GridBagConstraints.BOTH;

            URL url = new URL("http://www.digitalphotoartistry.com/rose1.jpg");
            ImageIcon image = new ImageIcon(url);
            JLabel imageLabel = new JLabel(image);
            frame.add(imageLabel, gbc);

            gbc.weightx = 0.9;
            gbc.weighty = 0.1;
            gbc.fill = GridBagConstraints.NONE;

            JButton b = new JButton("Click Here");
            frame.add(b, gbc);

            frame.pack();
            frame.setVisible(true);

        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

Однако вы обнаружите, что при изменении размера кадра изображение не меняется, это потому, что JLabel не поддерживает эту функцию

Лично я бы свернул свой собственный компонент, который мог бы изменить размер изображения так, как мне бы хотелось. Например, см. Java: поддержание соотношения сторон фонового изображения JPanel

...