将图片设为jpanel

时间:2013-02-16 19:37:52

标签: java image swing jframe jpanel

我使用此代码将图片设置为jframe。 但是,现在我的Jtable没有显示,为什么?

public class samplepage extends JFrame{
private AllUser userModel;
private JTable uTable;
JButton addUser;
JButton deleteUser;
JButton mainButton;
JTextField tf1;
JButton searchButton;
JLabel resultLbl;

public samplepage(){
    userModel=new AllUser();
    uTable=new JTable(userModel);
    add(new JScrollPane(uTable), BorderLayout.CENTER);
    add(buttonPanels() , BorderLayout.PAGE_START);
    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    this.setSize(800,600);
    this.setLocation(300, 60);
    this.setResizable(false);
}

public final JPanel buttonPanels(){
    JPanel buttonsPanel = new JPanel(new FlowLayout(FlowLayout.LEFT));
    setPic(this);
    addUser=new JButton("Add New User");
    deleteUser=new JButton("delete User");
    mainButton= new JButton("Main Page");
    tf1 = new JTextField("              ");
    searchButton=new JButton("Search");
    resultLbl=new JLabel();

    buttonsPanel.add(addUser);
    buttonsPanel.add(deleteUser);
    buttonsPanel.add(mainButton);
    buttonsPanel.add(tf1);
    buttonsPanel.add(searchButton);
    buttonsPanel.add(resultLbl);

    return buttonsPanel;
}

public void setPic(JFrame jframe){
 try{
  File f=new File("pics\\user_group.png");
  BufferedImage img=ImageIO.read(f);
  jframe.setContentPane(new SetMyImage(img));
 }
 catch(IOException ioe){

 }
}

public static void main(String[] args){
    new samplepage().setVisible(true);
}

}

第二课:

public class SetMyImage extends JPanel{

private Image img;

public SetMyImage(Image img){
    this.img=img;
}

@Override
protected void paintComponent(Graphics g){
    super.paintComponent(g);
    g.drawImage(img, 00, 00, null);

}
}

我的错误在哪里?

1 个答案:

答案 0 :(得分:3)

uTable=new JTable(userModel);
add(new JScrollPane(uTable), BorderLayout.CENTER);
add(buttonPanels() , BorderLayout.PAGE_START);

首先,将表格添加到内容窗格中。然后你创建你的buttonPanels(),它调用setPic(...)方法,该方法创建你的图像面板并使其成为你框架的内容窗格,这样就会丢失表格。

从buttonPanels代码中删除setPic()代码。相反,您的代码应该是:

setPic(...);
uTable=new JTable(userModel);
add(new JScrollPane(uTable), BorderLayout.CENTER);
add(buttonPanels() , BorderLayout.PAGE_START);

此外,您需要将图像面板的布局设置为BorderLayout。

由于您以实际尺寸绘制图像,因此无需创建自定义面板来进行绘制。相反,您可以使用JLabel作为内容窗格。有关此方法的详细信息,请参阅Background Panel