Ive에 JFrame이 있고 LayoutManager를 BorderLayout으로 설정 한 다음 이미지와 함께 JLabel을 추가합니다. 그러나 프레임 크기를 조정하면 JLabel의 크기가 조정되지 않습니다. 나는 North, S, E 등에 어떤 구성 요소도 추가하지 않았다. 나는 라벨 안의 이미지를 전체 프레임에 채워서 메뉴를 그대로두기를 바랬다.이미지 채우기로 JLabel을 만드는 방법 BorderLayout.CENTER
답변
오만한 것처럼 보이면 용서해주세요.하지만 계속 할 일이 없습니다.
나는 그게JLabel
의 국경의 빠른 샘플을
이미지 주위에 빨간 선을 참조
했다. 보시다시피 라벨은 전체 영역을 채울 수 있도록 크기가 조정되었습니다.)이
내가 분명히 샘플public class LayoutFrame extends JFrame {
public LayoutFrame() throws HeadlessException {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Image image = null;
URL url = getClass().getResource("/layout/issue78.jpg");
try {
image = ImageIO.read(url);
} catch (IOException ex) {
ex.printStackTrace();
}
JLabel label = new JLabel(new ImageIcon(image));
label.setHorizontalAlignment(JLabel.CENTER);
label.setVerticalAlignment(JLabel.CENTER);
label.setBorder(new LineBorder(Color.RED, 4));
setLayout(new BorderLayout());
add(label);
}
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (ClassNotFoundException ex) {
} catch (InstantiationException ex) {
} catch (IllegalAccessException ex) {
} catch (UnsupportedLookAndFeelException ex) {
}
LayoutFrame frame = new LayoutFrame();
frame.setSize(200, 200);
frame.setLocationByPlatform(true);
frame.setVisible(true);
}
});
}
}
을 생산하는 데 사용되는 코드입니다, 당신은 당신의 자신의 이미지를 제공해야합니다.
레이블이 콘텐츠의 크기를 조정하지 않는다는 것을 잊지 마세요. 목표를 달성하려면 자체 구성 요소를 구현해야합니다.
여전히 문제가있는 경우 라벨이 생각 나는 컨테이너에 없을 수도 있고 컨테이너 레이아웃 관리자가 생각한 바가 아닐 수도 있습니다 (추가 증거가없는 경우).
당신이 구성 요소는 메뉴 없거나 문제를가는 문제가 발생하는 이유를 모르겠어요
UPDATE. 무겁고 가벼운 구성 요소를 혼합합니까 ?? 귀하의 질문에 좀 더 가까이를 읽은 후 메뉴 바
와
가샘플, 나는 간단한 크기 조정 이미지 창 샘플을 고안했습니다. 속도를 위해, 나는 내 라이브러리에 의존했지만, 그것은
public class ImagePane extends JPanel {
protected static final Object RESIZE_LOCK = new Object();
private BufferedImage image;
private BufferedImage scaledImage;
private Timer resizeTimer;
public ImagePane() {
URL url = getClass().getResource("/layout/issue78.jpg");
try {
image = ImageIO.read(url);
} catch (IOException ex) {
ex.printStackTrace();
}
resizeTimer = new Timer(250, new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// Simple thread factory to start a slightly lower
// priority thread.
CoreThreadFactory.getUIInstance().execute(new ResizeTask());
}
});
resizeTimer.setCoalesce(true);
resizeTimer.setRepeats(false);
}
@Override
public void setBounds(int x, int y, int width, int height) {
super.setBounds(x, y, width, height);
resizeTimer.restart();
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2d = (Graphics2D) g;
if (scaledImage != null) {
// This simply returns a rectangle that takes into consideration
//the containers insets
Rectangle safeBounds = UIUtilities.getSafeBounds(this);
System.out.println("scaledImage = " + scaledImage.getWidth() + "x" + scaledImage.getWidth());
int x = ((safeBounds.width - scaledImage.getWidth())/2) + safeBounds.x;
int y = ((safeBounds.height - scaledImage.getHeight())/2) + safeBounds.y;
g2d.drawImage(scaledImage, x, y, this);
}
}
protected class ResizeTask implements Runnable {
@Override
public void run() {
synchronized (RESIZE_LOCK) {
if (image != null) {
int width = getWidth();
int height = getHeight();
System.out.println("width = " + width);
System.out.println("height = " + height);
// A simple divide and conquer resize implementation
// this will scale the image so that it will fit within
// the supplied bounds
scaledImage = ImageUtilities.getScaledInstanceToFit(image, new Dimension(width, height), ImageUtilities.RenderQuality.High);
System.out.println("scaledImage = " + scaledImage.getWidth() + "x" + scaledImage.getWidth());
repaint(); // this is one of the few thread safe calls
}
}
}
}
}
thanx. 문제는 메뉴와 같은 모든 구성 요소가 손실되고 다른 구성 요소가 손실된다는 것입니다. 당신 말이 맞아요, 제 문제는 레이블이 고통의 어느 부분에있는 아이콘 이미지의 크기를 조절하지 않는다는 것입니다. –
그것은 메뉴에 영향을 주어서는 안됩니다 : P – MadProgrammer
@trashgod OP의 지식 수준을 알지 못해서 나는 경악하는 소리를 내고 싶지 않았지만 어떤 시도가 있었는지 전혀 몰랐습니다. 기본 : P – MadProgrammer
가장 좋은 방법은 하위 클래스 이미지 아이콘에 내 전화 대신에 구현 자신의 코드에 합리적으로 쉽게 단순히 페인트의 paintIcon의 메소드를 오버라이드 (override) Graphics.paint (x, y, width, height ...)를 사용해 이미지를 렌더링합니다.
틀림없이 icon의 잘못된 구현 : getIconWidth/Height는 icon의 ** 고정 너비 **를 지정하여 _an int를 반환하도록 doc'ed되었습니다. 즉석에서 크기를 조정할 수는 없습니다 ... – kleopatra
IMHO 생각합니다. 베이스 라인'Icon'을 가져갈 수있는 어떤 종류의'Factory'와 더 잘 어울리고, 당신을 위해 필요한 크기의 새로운'Icon'을 만들거나 페인트를 대신 할 수 있습니다. 그러나 스케일링 작업이 상당 할 경우 (원본 이미지의 크기에 따라 0.1 % 또는 몇 백 개 이상으로 축소라고 말하면) EDT를 "정지"시킬 위험이 있습니다. 예제에서 볼 수 있듯이 모든 요청에 대해 크기를 조정하는 대신 크기 조정 요청에 대해 "병합"방식을 사용합니다. 일반적으로 "유휴 상태"에 이르면 최대한 적은 요청 만 시도하고 크기를 조정합니다. 하지만 그건 MHO – MadProgrammer
@madProgrammer 원래 q를 심하게 말하면서 유감스럽게 생각합니다. 아이콘 안에있는 이미지의 크기를 조정하고 싶지 않습니다. 부모 구성 요소를 채우기 위해 이미지를 늘려야합니다. 나는이 나쁜 말씨가 아마도 당신의 반응을 망쳤다는 것을 알고 있습니다. 그러나 나는 그것이 내가 한 것을 왜 시도했는지 말하기를 바랍니다. –
- 1. netbeans에서 동적 JLabel을 만드는 방법
- 2. 내가 BorderLayout.CENTER 내부 JPanel의이 BorderLayout.CENTER
- 3. JLabel을 클릭 할 수있게 만드는 방법?
- 4. BorderLayout.CENTER "disappears"
- 5. 동적으로 JLabel을 변경하는 방법
- 6. JLabel을 숨기거나 제거하는 방법
- 7. JLabel을 JEditorPane에 추가하는 방법?
- 8. Facebook에서와 같이 JTextArea에서 Jlabel을 만드는 방법은 무엇입니까?
- 9. JLabel을 사각형 안에 넣는 방법
- 10. 직사각형의 채우기로 사용되는 DrawingBrush
- 11. 메서드가있는 jlabel을 변경하십시오.
- 12. 이미지 뷰를 만드는 방법
- 13. 이미지 배열을 만드는 방법
- 14. Java에서 actionPerformed로 JLabel을 생성하십시오.
- 15. setAlignmentY BorderLayout에서 JLabel을 중심에 두지 않음
- 16. "이미지 구축"효과를 만드는 방법
- 17. Android - 이미지 선택기를 만드는 방법
- 18. 이미지 테두리를 균일하게 만드는 방법?
- 19. ipx 이미지 유형을 만드는 방법
- 20. Django 이미지 갤러리를 만드는 방법
- 21. 이미지 리소스에서 이미지를 만드는 방법
- 22. (로드) 이미지 오버레이 만드는 방법
- 23. 부드러운 이미지 애니메이션을 만드는 방법
- 24. JQuery에서 이미지 팔레트를 만드는 방법
- 25. matlab에 이미지 배열을 만드는 방법
- 26. JLabel을 다른 JLabel로 만들기
- 27. JLayeredPane에서 JLabel을 이동
- 28. 스윙 JLabel을 회전하십시오.
- 29. 자바에서는 직사각형에 JLabel을 어떻게 추가합니까?
- 30. JLabel을 사용하지 않고 Java 애니메이션 GIF
해당 이미지가 공간을 차지할만큼 충분히 커지기를 바랍니다. 제발, 이것 좀 봐 [예제] (http://stackoverflow.com/a/11372350/1057230) –
예, 이미지가 합리적으로 충분히 작습니다. 작은 아이콘이 아닙니다. –
샘플 코드가 있습니까 ?? – MadProgrammer