Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.219.86.155] |
|
Сообщ.
#1
,
|
|
|
Привет, как сделать чтобы картинка приспособилась бы к экрану если она загружена на Jlabel? Вот код программы:
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 Тэг есть специальный для кода! |
Сообщ.
#2
,
|
|
|
У объектов класса java.awt.Image есть метод для масштабирования - Image.getScaledInstance()
|
Сообщ.
#3
,
|
|
|
Мне нужно чтобы картинка загруженная в 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 |
Сообщ.
#4
,
|
|
|
label = new JLabel(""); ... label.setIcon(new ImageIcon(img)); Вам нужна реализация компанента Image? Если так, не используйте JLabel, а сами делайте drawImage. Если же нужно чтобы ImageIcon менял свои размеры... тут нестандартный случай, скорее всего, придётся вешать listener-а на системное событие и пересоздавать ImageIcon. Хотя, я мог не правильно понять. |
Сообщ.
#5
,
|
|
|
VisualProg, спасибо!
|
Сообщ.
#6
,
|
|
|
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); } } |
Сообщ.
#7
,
|
|
|
а javafx короче и шустрей
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(); } } |
Сообщ.
#8
,
|
|
|
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); Можно заменить на: graphics.drawImage(image,0,0,getWidth(),getHeight(),null); Да и в виде своего класса это будет куда удобнее, можно отрегулировать что угодно и как угодно |