- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我试图理解为什么下面的短代码不起作用。据我所知,当没有布局或组件的大小为0时,不会调用paint组件方法。
但这里的情况并非如此。
你能解释一下为什么我无法为此设置背景吗?
public class Login extends JPanel {
private BufferedImage bgImage;
public Login() {
super();
initImages();
setLayout(new BorderLayout());
setPreferredSize(new Dimension(600, 600));
add(new JLabel("Hi"), BorderLayout.CENTER);
}
private void initImages() {
try {
bgImage = ImageIO.read(new File("images/login.jpg"));
System.out.println("image loaded");
} catch (IOException e) {
e.printStackTrace();
System.out.println("image not loaded");
}
}
@Override
public void paintComponents(Graphics g) {
super.paintComponents(g);
g.drawImage(bgImage, 0, 0, null);
System.out.println("repaint");
}
public static void createAndShowGui() {
JFrame frame = new JFrame();
Login login = new Login();
frame.add(login, BorderLayout.CENTER);
frame.pack();
frame.setVisible(true);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
createAndShowGui();
}
});
}
}
最佳答案
如果您希望它起作用,那么您需要更改...
@Override
public void paintComponents(Graphics g) {
super.paintComponents(g);
g.drawImage(bgImage, 0, 0, null);
System.out.println("repaint");
}
更像是......
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
g.drawImage(bgImage, 0, 0, this);
}
paintComponent
负责绘制组件的“底层”,paintComponents
负责绘制子组件
关于java - 尽管 JPanel 设置了 PreferredSize,但 PaintComponent() 并未被调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43022050/
我正在使用 GridBagLayout Manager 来明确定义标签和 JScrollPane 应该放置的位置(目前)。 我使用 gridbagconstraint 告诉第一个名为“label1”(
JEditorPane 似乎有一个非常有趣的功能:它似乎跟踪其父级宽度,并相应地确定首选高度,即使父级不是 JViewport 也是如此。 通过轨道,我的意思是组件的首选宽度设置为其父级之一(可能除了
我仍在努力学习布局管理器的工作原理。我用两个 JPanel 制作了一个框架。第一个包含带有 boxLayout 的 textArea。第二个包含带有按钮的流布局。 我相应地设置了每个面板的 prefe
我是flutter的新手,我看到很少有用于布局设计的小部件,例如SizedBox和Container。有一个小部件是 PreferredSize 小部件,我不知道并且找不到任何有关它的示例。它与其他可
我想为 MyPanel 添加一个 FlowLayout 来添加一些任意按钮。我将 MyPanel 添加到 JFrame north(JFrame 有一个 BorderLayout)。我的问题是: 当M
有什么方法可以获取 JLabel 组件的(我认为是首选)大小,以便我可以根据它们调整其大小?我的 JLabel 的大小为 0,0 ,除非我设置其首选大小,但将其大小设置为任意像素值似乎是错误的方法,因
我不知道如何使带有 SpringLayout 的 JPanel 正确计算其首选大小,因为目前它始终是 (0, 0)。我尝试调用 panel.setPreferredSize(layout.prefer
有谁知道如何使用 Gridbaglayout 将 ScrollBar 添加到 JPanel,从而允许 Gridbaglayout 仍然在水平轴上重新定位组件。我尝试添加滚动条 - 但是当我执行 Gri
我刚刚注意到 JButton 至少在以下两件事是正确的: 按钮的 preferredSize 属性不是默认值。 按钮的 text 属性不是默认的“”(空)。 可能有其他属性值组合使按钮忽略操作的名称,
如何使整个AppBar居中以及如何减少前导图标? 我尝试使用 Center 小部件和 Column 以及 mainAxisAlignment.center 不工作。我尝试将 width 和 heigh
我正在关注这个 YouTube他们使用的教程Modifier.preferredSize()在一个盒子上和 Modifier.preferredHeight()在 Spacer Composable
我写了一个十六进制查看器。 但是,我发现 Swing 存在局限性。如果您有一个 3GB 文件并且以每行 20 像素进行渲染,则组件的总高度为: (3GB/每行 16 字节)* 每行 20 像素 = 3
我试图理解为什么下面的短代码不起作用。据我所知,当没有布局或组件的大小为0时,不会调用paint组件方法。 但这里的情况并非如此。 你能解释一下为什么我无法为此设置背景吗? public class
我有一个问题,我已经在 eclipse java neon 中编程,并且正在用表做一些事情,并且进入 swing,实际上是 JTable 的组件。现在我需要向表中的组件添加一个图像,我创建了一个名为
我是一名优秀的程序员,十分优秀!