Java 获取JLabel大小
我试图在Java 获取JLabel大小,java,image,jlabel,Java,Image,Jlabel,我试图在JLabel上匹配图像,但无法获得宽度或高度。我认为这是因为jLabel1没有实例化。但我在设计面板上画画。不管怎样,我怎么做 我创建了JFrame,JPanel(jPanel1)和JLabel(jLabel1)。(在netbeans上) 这是我的密码: public class ImageProcessing extends javax.swing.JFrame { Image image; public ImageProcessing() { s
JLabel
上匹配图像,但无法获得宽度或高度。我认为这是因为jLabel1没有实例化。但我在设计面板上画画。不管怎样,我怎么做
我创建了JFrame
,JPanel
(jPanel1)和JLabel
(jLabel1)。(在netbeans上)
这是我的密码:
public class ImageProcessing extends javax.swing.JFrame {
Image image;
public ImageProcessing() {
setSize(640, 480);
setVisible(true);
ImageIcon icon = new ImageIcon("D:\\timeline.jpg");
image = icon.getImage();
Image newImg = image.getScaledInstance(jLabel1.getHeight(), jLabel1.getWidth(), java.awt.Image.SCALE_SMOOTH);
ImageIcon i1 = new ImageIcon(newImg);
jLabel1 = new JLabel(i1);
getContentPane().add(jLabel1);
}
这应该行得通
import java.awt.Dimension;
import java.awt.Image;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
public class ImageProcessing extends JFrame {
private JLabel jLabel1;
private JPanel jPanel1;
public ImageProcessing() {
initComponents();
ImageIcon icon = new ImageIcon("D:\\timeline.jpg");
Image scaledInstance = icon.getImage().getScaledInstance(jLabel1.getWidth(), jLabel1.getHeight(), Image.SCALE_SMOOTH);
ImageIcon scaledIcon = new ImageIcon(scaledInstance);
jLabel1.setIcon(scaledIcon);
this.setSize(new Dimension(1024, 768));
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
new ImageProcessing();
}
});
}
private void initComponents() {
jPanel1 = new javax.swing.JPanel();
jLabel1 = new javax.swing.JLabel();
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);
jPanel1.setLayout(jPanel1Layout);
jPanel1Layout.setHorizontalGroup(
jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGap(0, 604, Short.MAX_VALUE)
);
jPanel1Layout.setVerticalGroup(
jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGap(0, 351, Short.MAX_VALUE)
);
jLabel1.setText("Label");
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addGap(139, 139, 139)
.addComponent(jLabel1, javax.swing.GroupLayout.PREFERRED_SIZE, 493, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addGap(52, 52, 52)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
.addComponent(jLabel1, javax.swing.GroupLayout.PREFERRED_SIZE, 226, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addContainerGap(144, Short.MAX_VALUE))
);
pack();
}// </editor-fold>
}
导入java.awt.Dimension;
导入java.awt.Image;
导入javax.swing.ImageIcon;
导入javax.swing.JFrame;
导入javax.swing.JLabel;
导入javax.swing.JPanel;
导入javax.swing.SwingUtilities;
公共类ImageProcessing扩展了JFrame{
私人JLabel jLabel1;
私人JPanel jPanel1;
公共图像处理(){
初始化组件();
ImageIcon图标=新的ImageIcon(“D:\\timeline.jpg”);
Image scaledInstance=icon.getImage().getScaledInstance(jLabel1.getWidth(),jLabel1.getHeight(),Image.SCALE\u平滑);
ImageIcon scaledIcon=新的ImageIcon(缩放状态);
jLabel1.setIcon(scaledIcon);
此.setSize(新尺寸(1024768));
此.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
此.setVisible(true);
}
公共静态void main(字符串[]args){
SwingUtilities.invokeLater(新的Runnable(){
@凌驾
公开募捐{
新图像处理();
}
});
}
私有组件(){
jPanel1=newjavax.swing.JPanel();
jLabel1=newjavax.swing.JLabel();
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
javax.swing.GroupLayout jPanel1Layout=新的javax.swing.GroupLayout(jPanel1);
setLayout(jPanel1Layout);
jPanel1Layout.setHorizontalGroup(
jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGap(0,604,短。最大值)
);
jPanel1Layout.setVerticalGroup(
jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGap(0,351,短。最大值)
);
jLabel1.setText(“标签”);
javax.swing.GroupLayout=newjavax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(布局);
layout.setHorizontalGroup(
createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addGap(139、139、139)
.addComponent(jLabel1,javax.swing.GroupLayout.PREFERRED_SIZE,493,javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jPanel1,javax.swing.GroupLayout.PREFERRED\u SIZE,javax.swing.GroupLayout.DEFAULT\u SIZE,javax.swing.GroupLayout.PREFERRED\u SIZE)
.addContainerGap(javax.swing.GroupLayout.DEFAULT\u SIZE,Short.MAX\u VALUE))
);
layout.setVerticalGroup(
createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addGap(52,52,52)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.training)
.addComponent(jLabel1,javax.swing.GroupLayout.PREFERRED_SIZE,226,javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(jPanel1、javax.swing.GroupLayout.PREFERRED\u SIZE、javax.swing.GroupLayout.DEFAULT\u SIZE、javax.swing.GroupLayout.PREFERRED\u SIZE))
.addContainerGap(144,简称最大值))
);
包装();
}//
}
如果未实例化“jLabel1”,则会导致空指针异常。也许记录“getHeight”和“getWidth”方法调用的返回值,以确认其高度和宽度。调试的关键是缩小问题的范围并对其进行分区。打印(或以其他方式查找)这些方法返回的值将有助于划分设置的高度和宽度是否存在问题,或者您如何使用这些返回的值。我看到了,但我想知道,我可以在“设计”选项卡中调整jLabel1的大小,并且我看到了属性,例如(226x200)。但为什么我不能从“源”选项卡中获取此大小?是的,我理解我的问题,我删除了initComponents();但是我写了它,我可以达到宽度或高度,但是现在这个图像没有出现在JFrame上。你的意思是,你可以在用new JLabel(i1)
?@user3005212调用构造函数后得到这个jLabel1的大小。因此,下次最好添加更多的代码,因为我们可以帮助你解决问题,但是,如果您在代码的其他部分遇到更多问题,我们将无法帮助您解决此问题;)是的,你是对的,但除了从netbeans创建的代码之外,我没有其他代码。