【问题标题】:Permanent location of an Image?图像的永久位置?
【发布时间】:2014-09-02 10:33:41
【问题描述】:

我的工作有问题。 我想要发生的是我想让我的图像有一个特定的或永久的位置。 但是每次我调整窗口大小时,图像也会改变它的位置。当我使用 .setResizable(false) 时,我看不到文本和图像。

import java.awt.*;
import javax.swing.*;

public class ProgDraft extends JFrame {
private ImageIcon image1;
private JLabel label1;

ProgDraft() {

    JPanel panel = new JPanel();
    panel.setLayout(new FlowLayout());

    ImageIcon pics = new ImageIcon(getClass().getResource("l.png"));

    JLabel logo = new JLabel(pics);
    panel.setBounds(100,100,100,100);
    panel.add(logo);


    JLabel title = new JLabel("Testing Title");
    panel.add(title);

    getContentPane().setLayout(new BorderLayout());


    getContentPane().add(panel);
    getContentPane().add(logo, BorderLayout.CENTER);
    getContentPane().add(title, BorderLayout.NORTH);
}
}

这里是主要的

   import javax.swing.*;
   import java.awt.*;

    public class ProgDraftMain {
    public static void main(String args[]) {
    ProgDraft gui = new ProgDraft();
    gui.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    gui.setResizable(false);
    gui.setVisible(true);

    //gui.pack();
    gui.setSize(500 , 300);
    }
    } 

谢谢!

【问题讨论】:

  • 这会出问题,因为它是一样的:getContentPane().add(panel); getContentPane().add(logo, BorderLayout.CENTER); 两个组件都用 BorderLayout.CENTER 添加(CENTER 是默认值)

标签: java swing user-interface jpanel jlabel


【解决方案1】:

您已将徽标添加到面板,但您尝试再次将徽标添加到内容窗格(与标题相同)。第一次添加到面板被否定,这很糟糕,因为您需要 FlowLayout 来保持位置。每个组件只能有一个父级。不要将徽标添加到内容窗格。只需添加面板,并将面板的布局设置为new FlowLayout(FlowLayut.LEADING)。这会将标签放在面板的最左侧。然后你可以为标签添加一个空边框来为标签添加间距

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.Font;

import javax.swing.BorderFactory;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;

public class ProgDraftMain {

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable(){
            public void run() {
                ProgDraft gui = new ProgDraft();
                gui.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
                gui.setResizable(false);
                gui.setSize(500 , 300);
                gui.setVisible(true);           
            }
        });
    }
}

class ProgDraft extends JFrame {
    private ImageIcon image1;
    private JLabel label1;

    ProgDraft() {

        JPanel panel = new JPanel();
        panel.setLayout(new FlowLayout(FlowLayout.LEADING));

        ImageIcon pics = new ImageIcon(getClass().getResource("stackoverflow.png"));

        JLabel logo = new JLabel(pics);
        logo.setBorder(BorderFactory.createEmptyBorder(10, 10, 0, 0));
        panel.add(logo);
        panel.setBorder(BorderFactory.createLineBorder(Color.BLACK));

        JLabel title = new JLabel("Testing Title", JLabel.CENTER);
        Font font = new Font("impact", Font.PLAIN, 30);
        title.setFont(font);

        getContentPane().setLayout(new BorderLayout());

        getContentPane().add(panel, BorderLayout.CENTER);
        getContentPane().add(title, BorderLayout.PAGE_START);
    }
}

学习使用不同的布局管理器。不要试图依赖像素完美的位置。见Laying out Components Within a Container

也可以看看How to Use Borders

【讨论】:

  • 酷!这是一个很大的帮助!谢谢,我一定会阅读您分享的链接。再次感谢您!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-16
  • 2013-08-11
  • 2012-09-09
  • 1970-01-01
  • 2016-07-25
相关资源
最近更新 更多