- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
背景:-我需要使用 Netbeans GUI Builder 制作 Swing GUI。第一个子任务是在整个背景中显示图像。
我关注了a tutorial完成那件事。我基本上制作了一个 JFrame,将其布局设置为 GridBagLayout,然后向其添加了一个透明(通过取消选中不透明属性)JPanel。 (问题一)
之后,我向 JFrame 添加了一个 JLabel,删除了它的文本并向其添加了一个图像。 (问题二)
问题:-
首先,当我添加 JPanel 时,它不显示其调整大小的句柄。我用谷歌搜索了一下,发现 this tutorial ,其中可以看出当他们创建一个 JPanel 时,它会自动显示其调整大小 handle ,可以拖动以调整其大小。
但我的没有(下面的屏幕截图)那么是否有一些属性或东西可以调整以便我可以调整它的大小? 因为我的意图是使用这个透明面板包含组件(按钮等)背景,所以它应该消失整个屏幕/窗口/JFrame parent 。
其次,因为我使用的图像有一些 1024x768 尺寸,所以它看起来比它的父组件大得多。
由于我是菜鸟,不知道背景尺寸是否合适图像需要通过某种方式测量像素宽度和父级的像素高度,然后转换实际图像的在某些程序(如 Adobe Photoshop)中调整为该大小。但我是确保必须有更实用的方法来做到这一点。
我希望图像在最初放置在父级上时根据父级的大小自动调整自身大小J标签。我怎样才能做到这一点?请告诉我最简单的方法,最好在 GUI Builder 中。
我还想确保图像大小、它的父级 JLabel 的大小、JPanel 的大小都将在我稍后使用此应用程序时更改窗口大小时调整到框架,或者如果有办法禁用完全调整窗口大小。
EDIT1 @Braj
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package com.dev_nna.dbp;
public class JFrameParent extends javax.swing.JFrame {
/**
* Creates new form JFrameParent
*/
public JFrameParent() {
initComponents();
}
/**
* This method is called from within the constructor to initialize the form.
* WARNING: Do NOT modify this code. The content of this method is always
* regenerated by the Form Editor.
*/
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">
private void initComponents() {
jPanel1 = new javax.swing.JPanel();
jLabel1 = new javax.swing.JLabel();
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
getContentPane().setLayout(new java.awt.GridBagLayout());
javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);
jPanel1.setLayout(jPanel1Layout);
jPanel1Layout.setHorizontalGroup(
jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGap(0, 0, Short.MAX_VALUE)
);
jPanel1Layout.setVerticalGroup(
jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGap(0, 0, Short.MAX_VALUE)
);
getContentPane().add(jPanel1, new java.awt.GridBagConstraints());
jLabel1.setIcon(new javax.swing.ImageIcon(getClass().getResource("/com/dev_nna/dbp/scheduler/resources/Abstract-white-and-blue-backgrounds.jpg"))); // NOI18N
jLabel1.setText("jLabel1");
getContentPane().add(jLabel1, new java.awt.GridBagConstraints());
pack();
}// </editor-fold>
/**
* @param args the command line arguments
*/
public static void main(String args[]) {
/* Set the Nimbus look and feel */
//<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">
/* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.
* For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html
*/
try {
for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
if ("Nimbus".equals(info.getName())) {
javax.swing.UIManager.setLookAndFeel(info.getClassName());
break;
}
}
} catch (ClassNotFoundException ex) {
java.util.logging.Logger.getLogger(JFrameParent.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
} catch (InstantiationException ex) {
java.util.logging.Logger.getLogger(JFrameParent.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
} catch (IllegalAccessException ex) {
java.util.logging.Logger.getLogger(JFrameParent.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
} catch (javax.swing.UnsupportedLookAndFeelException ex) {
java.util.logging.Logger.getLogger(JFrameParent.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
}
//</editor-fold>
/* Create and display the form */
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new JFrameParent().setVisible(true);
}
});
}
// Variables declaration - do not modify
private javax.swing.JLabel jLabel1;
private javax.swing.JPanel jPanel1;
// End of variables declaration
}
最佳答案
" or if there is a way to disable the sizing of the window completely."
您可以将框架的 resizable 属性设置为 false。来自 NetBeans GUI 生成器
resizable
并确保未选中它"I also want to ensure that the image size, its parent JLabel's size, JPanel's size will all adjust to the frame when the I change the size of the window"
一种方法是将背景绘制到背景面板上,而不是使用带有图标的标签。你可以看到一个例子 here .对于 GUI Builder,最简单的方法(无需编辑自动生成的代码,如果您不知道自己在做什么,我不推荐这样做)是使用 JPanel
表单而不是 JFrame
表单。在 JPanel
表单上绘制,然后您可以将该 JPanel
表单添加到 JFrame
表单。可以看到here了解将 JPanel
表单添加到 JFrame
表单的简单方法。
参见 Performing Custom Painting学习更多关于绘画的知识
也可以看看这个StretchIcon
您可以与标签一起使用。
更新
所以你的 JPanel
表单类最终看起来像这样
public class PanelForm extends javax.swing.JPanel {
private BufferedImage image;
public PanelForm() {
try {
image = ImageIO.read(getClass().getResource("/path/to/image/png"));
} catch (IOException ex) {
ex.printStackTrace();
}
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
g.drawImage(image, 0, 0, getWidth(), getHeight(), this);
}
@Override
public Dimension getPreferredSize() {
return new Dimension(500, 500);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable(){
public void run() {
JFrame frame = new JFrame();
frame.add(new PanelForm()); // <--- add it here
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
});
}
}
关于java - 在 Netbeans GUI Builder 中,如何使图像根据父级 JLabel 的大小自动缩放其大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23322564/
我已经创建了一个蛇梯游戏,它运行良好,但现在我想对其进行一些修改。我希望每个玩家都有两个棋子/玩家而不是一个。现在的新规则变成,同一玩家的两个棋子可以占据同一个方 block ,因此我需要一种方法将它
抱歉标题含糊不清,但我想不出我想在标题中做什么。无论如何,对于图像上的文本,我使用了 JLabel 文本并将其添加到图标中。 JLabel icon = new JLabel(new Imag
我想将我的私有(private) jlabel 对象复制到一个新的 jlabel 对象并将新的 jlabel 对象公开。想法是允许任何人访问 jlabel 的属性,但不允许进行任何将显示在原始界面上的
我有一个由二维 int 数组组成的网格。 基本包含00、01、02等,无需赘述。 我有一种提取网格位置的方法,然后使用字符串生成器操作字符串,将其更改为“jxy”(x = 网格中的 x 位置,y =
我目前正在尝试将 tabIconLabels(即 JLabels)放在更大的 JLabel(tabAreaLabel)上(所有标签都附加有 ImageIcon)。我尝试使用 OverlayLayout
我一直在尝试将一个 JLabel 放在另一个 Roguelike 之上。不幸的是,它似乎不起作用。到目前为止,这是我的代码: public void updateDraw(int direction)
我正在为 Tic Tac Toe 项目开发 GUI,其中我希望在单击相应区域时显示图像(玩家的移动)。但是,我不知道如何在另一个 JLabel(背景)之上显示 JLabel(移动)。 我已经搜索并尝试
public void movePiece(JLabel destination){ JLabel currentPiece = piece[oldIndex[0]][oldIndex[1]];
我在这方面遇到了障碍,希望能得到一些见解。 这是我想要实现的基本要点: -我有一个 piece 类(扩展 JPanel),它有一个 JRadioButton 数组,以及一个 JLabel 根据选择的按
我有一个名为 iconLabel 的类,它扩展 JLabel 来制作按钮。我使用 Font Awesome 字体将 JLabel 的文本设置为图标。我还在构造函数中向 iconLabel 对象添加了另
我对Java真的很陌生,我想制作一个简单的GUI,其中有一个按钮,当你点击它时就会计数,我遵循this YouTube 上的教程即可实现这一目标。一切都很顺利,一切都很顺利。但有一件事没有,JLabe
假设我有一个 JLabel 大小 20x20。现在假设我添加了字符串“The Quick Brown Fox Jumps Over the Lazy Dog”。这句话对于 JLabel 来说太长,因此
我有以下代码: try { File file_background = new File( "C:\\Users\\xxxx\\Desktop\\ba
我使用 netbean 创建了一个 jframe,并向该 jframe 添加了一个 jlabel (changeLbl)。之后,我向该 jframe 添加了一个 jbutton。现在我需要创建一个新的
Game(){ JFrame frame = new JFrame("Display Image"); JPanel panel = (JPanel)frame.getContentP
我在 swing 中使用带有图标的 Jlabel。我从我的计算机中选择了一个图像作为图标,但我找不到一种方法让它自动调整为 Jlabel 的大小。因为我想要的图像比 Jlabel 的大小大得多,所以我
是否可以在另一个 JLabel 之上添加一个 JLabel?谢谢。 最佳答案 简短的回答是肯定的,因为 JLabel是 Container , 所以它可以接受 Component (JLabel 是
我试图在我的 GUI 中显示卡片,我想重叠卡片以节省空间。但是,我似乎无法让它工作。我目前正在使用 MigLayout,尽管感觉它更像是一个 JLabel 问题而不是其他问题。 要从高层次来描述它,请
我正在将布局设置为 null,我有一个具有宽高比的 JFrame,并且在调整大小期间,该框架保持相同的宽高比。 每次我调整框架大小时,我都会调整所有组件的大小,没有任何问题,只是使用 JLabel 调
现在,我正在开发另一个 JPanel与 9 JLabel每个分配有不同的 Color 。应用程序要做的是,当用户单击第一个面板时,除了 JLabel 的颜色发生变化之外,不会发生任何事情。将被注册到实
我是一名优秀的程序员,十分优秀!