На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Следующие правила действуют в данном разделе в дополнение к общим Правилам Форума
1. Здесь обсуждается Java, а не JavaScript! Огромная просьба, по вопросам, связанным с JavaScript, SSI и им подобным обращаться в раздел WWW Masters или, на крайний случай, в Многошум.
2. В случае, если у вас возникают сомнения, в каком разделе следует задать свой вопрос, помещайте его в корневую ветку форума Java. В случае необходимости, он будет перемещен модераторами (с сохранением ссылки в корневом разделе).

3. Запрещается создавать темы с просьбой выполнить какую-то работу за автора темы. Форум является средством общения и общего поиска решения. Вашу работу за Вас никто выполнять не будет.
4. Не рекомендуется создавать несколько несвязанных вопросов в одной теме. Пожалуйста, создавайте по одной теме на вопрос.
Модераторы: dark_barker, wind
  
> Java и Jlabel
    Привет, как сделать чтобы картинка приспособилась бы к экрану если она загружена на Jlabel? Вот код программы:

    ExpandedWrap disabled
      import java.awt.Dimension;
      import java.awt.EventQueue;
      import java.awt.Image;
      import java.awt.FlowLayout;
      import java.awt.Color;
      import java.awt.Toolkit;
      import java.awt.event.ActionListener;
      import java.awt.event.ActionEvent;
      import java.awt.Font;
       
      import javax.swing.*;
      import java.awt.BorderLayout;
      import javax.swing.GroupLayout.Alignment;
       
      public class Frame1 {
       
          private JFrame frame;
          private JLabel label;
       
          /**
           * Launch the application.
           */
          public static void main(String[] args) {
              EventQueue.invokeLater(new Runnable() {
                  public void run() {
                      try {
                          Frame1 window = new Frame1();
                          window.frame.setVisible(true);
                      } catch (Exception e) {
                          e.printStackTrace();
                      }
                  }
              });
          }
       
          /**
           * Create the application.
           */
          public Frame1() {
              initialize();
          }
          //Dimension dimension = Toolkit.getDefaultToolkit().getScreenSize();
          //int x = dimension.width;
          //int y = dimension.height;
          int x =1370;
          int y =770;
       
          /**
           * Initialize the contents of the frame.
           */
          private void initialize() {
              frame = new JFrame();
              frame.getContentPane().setBackground(Color.WHITE);
              frame.setBounds(0, 0, x-5, y-45);
              //frame.setResizable(false);
              frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
       
              label = new JLabel("");
              label.setBounds(0, 0, x-5, y-45);
              label.setVerticalAlignment(SwingConstants.TOP);
              label.setLocale(null);
              Image img=new ImageIcon(this.getClass().getResource("/1ii.png")).getImage();
              frame.getContentPane().setLayout(null);
              label.setIcon(new ImageIcon(img));
              frame.getContentPane().add(label);
          }
       
      }

    M
    Тэг есть специальный для кода! <_<
    Сообщение отредактировано: wind -
      У объектов класса java.awt.Image есть метод для масштабирования - Image.getScaledInstance()
        Мне нужно чтобы картинка загруженная в Jlabel каждый раз при увеличении или уменьшении окна подстраивалась бы в реальном времени. А с кодом Image.getScaledInstance()если картинка больше чем резолюция экрана, то она не уменьшается
        Man reikia, kad paveikslėlis, įkeltas į Jlabel prisitaikytų prie lango dydžio kas kartą, kai langas yra mažinamas - didinamas realiu laiku. Nes su kodu jei paveikslėlis yra didesnis už ekrano matmenis jis nesusimažina
          ExpandedWrap disabled
            label = new JLabel("");
            ...
            label.setIcon(new ImageIcon(img));


          Вам нужна реализация компанента Image? Если так, не используйте JLabel, а сами делайте drawImage.

          Если же нужно чтобы ImageIcon менял свои размеры... тут нестандартный случай, скорее всего, придётся вешать listener-а на системное событие и пересоздавать ImageIcon. Хотя, я мог не правильно понять. :huh:
            VisualProg, спасибо!
              ExpandedWrap disabled
                import javax.imageio.ImageIO;
                import javax.swing.*;
                import java.awt.*;
                import java.awt.geom.Rectangle2D;
                import java.awt.image.BufferedImage;
                import java.io.IOException;
                import java.net.URL;
                 
                public class StretchImageSample {
                 
                    public static void main(String... args) throws IOException {
                        BufferedImage image = ImageIO.read(new URL("http://www.freeimageslive.com/galleries/sports/sportsgames/preview/cricket_ball.jpg"));
                        CustomLabel label = new CustomLabel(image);
                 
                        JFrame frame = new JFrame();
                        frame.setContentPane(label);
                        frame.setSize(image.getWidth(), image.getHeight());
                        frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
                        frame.setVisible(true);
                    }
                 
                }
                 
                class CustomLabel extends JLabel {
                 
                    private BufferedImage image;
                 
                    public CustomLabel(BufferedImage image) {
                        this.image = image;
                    }
                 
                    @Override protected void paintComponent(Graphics graphics) {
                        Graphics2D graphics2d = (Graphics2D) graphics;
                        Dimension size = getSize();
                        Rectangle2D textureBounds = new Rectangle2D.Double(0, 0, size.width, size.height);
                        TexturePaint texturePaint = new TexturePaint(image, textureBounds);
                        graphics2d.setPaint(texturePaint);
                        graphics2d.fillRect(0, 0, size.width, size.height);
                    }
                 
                }
                а javafx короче и шустрей

                ExpandedWrap disabled
                  import javafx.application.Application;
                  import javafx.scene.Scene;
                  import javafx.scene.image.Image;
                  import javafx.scene.layout.BorderPane;
                  import javafx.scene.paint.ImagePattern;
                  import javafx.scene.paint.Paint;
                  import javafx.stage.Stage;
                   
                  public class StretchImageFXSample extends Application {
                   
                      @Override public void start(Stage primaryStage) throws Exception {
                          Image image = new Image("http://www.freeimageslive.com/galleries/sports/sportsgames/preview/cricket_ball.jpg");
                          Paint paint = new ImagePattern(image);
                          BorderPane root = new BorderPane();
                          Scene scene = new Scene(root, paint);
                          primaryStage.setScene(scene);
                          primaryStage.setWidth(image.getWidth());
                          primaryStage.setHeight(image.getHeight());
                          primaryStage.show();
                      }
                   
                  }
                  ExpandedWrap disabled
                    Graphics2D graphics2d = (Graphics2D) graphics;
                            Dimension size = getSize();
                            Rectangle2D textureBounds = new Rectangle2D.Double(0, 0, size.width, size.height);
                            TexturePaint texturePaint = new TexturePaint(image, textureBounds);
                            graphics2d.setPaint(texturePaint);
                            graphics2d.fillRect(0, 0, size.width, size.height);


                  Можно заменить на:

                  ExpandedWrap disabled
                    graphics.drawImage(image,0,0,getWidth(),getHeight(),null);


                  Да и в виде своего класса это будет куда удобнее, можно отрегулировать что угодно и как угодно :D
                  0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                  0 пользователей:


                  Рейтинг@Mail.ru
                  [ Script execution time: 0,0421 ]   [ 15 queries used ]   [ Generated: 4.05.24, 08:32 GMT ]