2014-09-02 2 views
1

У меня проблема с моей работой. Что я хочу, так это то, что я хочу, чтобы мое изображение было определенным или постоянным. Но каждый раз, когда я изменяю размер окна, изображение также меняет свое место. И когда я использую .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); 
    } 
    } 

спасибо!

+0

это сделает проблемы, потому что это то же самое: ** getContentPane() добавить (панель);. getContentPane(). Add (логотип, BorderLayout.CENTER); ** оба компонента добавлены с BorderLayout.CENTER (CENTER по умолчанию) – Ben

ответ

2

Вы уже добавили логотип на панель, но вы снова попытаетесь добавить логотип в область содержимого (то же самое с заголовком). Первое добавление к панели отрицается, что плохо, потому что вам нужно 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

enter image description here

также посмотреть на How to Use Borders

+0

cool! это большая помощь! спасибо, и я обязательно прочитаю ссылки, которые вы поделили. еще раз спасибо! – Naomi

Смежные вопросы