我使用此代码将图片设置为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);
}
}
我的错误在哪里?
答案 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。