关于SWing的几个问题?十万火急!!!50分

时间:2023-01-29 12:09:40
   1。请问怎么写一个空的JPanel放到JFrame中去,并显示出来(即一块空的区域,什么都没有)?
   2。请问怎么精确定位JButton在JPanel中的位置?
   3。请帮我解释一下下面这段代码中我有注释的地方,谢谢


import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.table.*;
import java.util.*;

public class Tb extends JFrame
{
  private int rows=3,cols=5;
  private Object[] rowData=new Object[cols];//Object类主要拿来干什么?

  private DefaultTableModel model=new DefaultTableModel;
  private JTable table=new JTable(model);

  public Tb()
  { 
    for(int c=0;c<cols;c++)
      model.addColumn("Column "+Integer.toString(c));

    for(int r=0;r<rows;r++)
    {
      for(int c=0;c<cols;c++)
      {
        rowData[c]="("+r+","+c+")";
      }
      model.addRow(rowData);
    }

    getContentPane().add(new LeftPanel(),BorderLayout.WEST);
    getContentPane().add(new JScrollPane(table),BorderLayout.CENTER);
    getContentPane().add(new ControlPanel(),BorderLayout.EAST);
  }
  
  public static void main(String args[])
  {
    GJApp.launch(new Tb(),"dk",150,150,600,350); //GJApp类的作用???
  }
  
  class LeftPanel extends JPanel
  {
private JLabel prompt=new JLabel("hztndz");
    public LeftPanel()
{
  add(prompt);
}
  }

  class ControlPanel extends JPanel
  {
    private JButton rowButton=new JButton("增加字段"),
    colButton=new JButton("增加记录");

    public ControlPanel()
    {
      setLayout(new BorderLayout());
      add(rowButton,BorderLayout.NORTH);
      add(colButton,BorderLayout.SOUTH);

      rowButton.addActionListener(new ActionListener()
      {
        public void actionPerformed(ActionEvent e)
        {
          int rowCount=model.getRowCount();
          int colCount=model.getColumnCount();

          if(colCount>rowData.length)
            rowData = new Object[colCount];

          for(int c=0;c<colCount;++c)
          {
            rowData[c]="("+rowCount+","+c+")";
          }
          model.addRow(rowData);
        }
      });
      
      colButton.addActionListener(new ActionListener()
      {
        public void actionPerformed(ActionEvent e)
        {
          int colCount=model.getColumnCount();
          model.addColumn("Column "+colCount);

          table.sizeColumnsToFit(-1);
        }
      });
    }
  }
}


class GJApp extends WindowAdapter//WindowAdapter类的作用是什么???
{
  static private JPanel statusArea=new JPanel();
  static private JLabel status=new JLabel(" ");
  static private ResourceBundle resources;

  public static void launch(final JFrame f,String title,final int x,final int y,final int w,int h)
  {
    launch(f,title,x,y,w,h,null);
  }
  
  public static void launch(final JFrame f,String title,final int x,final int y,final int w,int h,String propertiesFilename)
  {
    f.setTitle(title);
    f.setBounds(x,y,w,h);
    f.setVisible(true);

    statusArea.setBorder(BorderFactory.createEtchedBorder());
    statusArea.setLayout(new FlowLayout(FlowLayout.LEFT,0,0));
    statusArea.add(status);
    status.setHorizontalAlignment(JLabel.LEFT);

    f.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);//这行是什么意思???

    if(propertiesFilename!=null)
    {
      resources=ResourceBundle.getBundle(propertiesFilename,Locale.getDefault());//ResourceBundle类的作用是什么??
    }

    f.addWindowListener(new WindowAdapter()
    {
      public void windowClosed(WindowEvent e)
      {
        System.exit(0);
      }
    });
  }
  
  static public JPanel getStatusArea()
  {
    return statusArea;
  }
  
  static public void showStatus(String s)
  {
    status.setText(s);
  }
  
  static Object getResource(String key)
  {
    if(resources!=null)
    {
      return resources.getString(key);
    }
    return null;
  }
}

5 个解决方案

#1


1) 给panel加背景色你就能看见了

2。请问怎么精确定位JButton在JPanel中的位置?

   jpanel.setLayout(null);
   jbutton.setBounds(x,y,w,h);
   jpanel.add(jbutton);

3 WindowAdapter类的作用是什么???  监听窗体事件

//GJApp类的作用???  继承 WindowAdapter

#2


1.
jPanel1.setBorder(BorderFactory.createRaisedBevelBorder());
2.
import com.borland.jbcl.layout.*;
...
jPanel1.setLayout(new XYLayout());
jPanel1.add(jbutton,  new XYConstraints(94, 16, 138, -1));
3.
Object类作为JTable每个格子存储的对象
GJApp加载应用程序,打开JFrame对象,设置窗口位置 
WindowAdapter可以接收窗口事件:
Method Summary 
 void windowActivated(WindowEvent e) 
          Invoked when a window is activated. 
 void windowClosed(WindowEvent e) 
          Invoked when a window has been closed. 
 void windowClosing(WindowEvent e) 
          Invoked when a window is in the process of being closed. 
 void windowDeactivated(WindowEvent e) 
          Invoked when a window is de-activated. 
 void windowDeiconified(WindowEvent e) 
          Invoked when a window is de-iconified. 
 void windowGainedFocus(WindowEvent e) 
          Invoked when the Window is set to be the focused Window, which means that the Window, or one of its subcomponents, will receive keyboard events. 
 void windowIconified(WindowEvent e) 
          Invoked when a window is iconified. 
 void windowLostFocus(WindowEvent e) 
          Invoked when the Window is no longer the focused Window, which means that keyboard events will no longer be delivered to the Window or any of its subcomponents. 
 void windowOpened(WindowEvent e) 
          Invoked when a window has been opened. 
 void windowStateChanged(WindowEvent e) 
          Invoked when a window state is changed. 

4。f.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);//这行是什么意思

setDefaultCloseOperation
public void setDefaultCloseOperation(int operation)
Sets the operation that will happen by default when the user initiates a "close" on this frame. You must specify one of the following choices: 

DO_NOTHING_ON_CLOSE (defined in WindowConstants): Don't do anything; require the program to handle the operation in the windowClosing method of a registered WindowListener object. 
HIDE_ON_CLOSE (defined in WindowConstants): Automatically hide the frame after invoking any registered WindowListener objects. 
DISPOSE_ON_CLOSE (defined in WindowConstants): Automatically hide and dispose the frame after invoking any registered WindowListener objects. 
EXIT_ON_CLOSE (defined in JFrame): Exit the application using the System exit method. Use this only in applications. 
The value is set to HIDE_ON_CLOSE by default. 

5。ResourceBundle可以动态绑定对象
按照字符串判别所需对象
Object getResource(String key)


#3


直接new Jpane(),然后把该对象frame.add(panel)
JPanel panel = new JPanel();
panel.setLayout(null);
JButton button = new JButton();
button.setBounds(100,100,100,30);
panel.add(button);
setbound()可以用来让你精确定位button,前面必须使panel的布局管理器为空

#4


问题是我不光光就一个Panel,是一个Top,Left,Main三个区域的图形,Top和Left用Panel,Main用JScrollPane放一个DefaultTableModel表格模型的JTable,所以,setBounds()的具体坐标老是搞不清楚。

#5


用XYLayout吧

#1


1) 给panel加背景色你就能看见了

2。请问怎么精确定位JButton在JPanel中的位置?

   jpanel.setLayout(null);
   jbutton.setBounds(x,y,w,h);
   jpanel.add(jbutton);

3 WindowAdapter类的作用是什么???  监听窗体事件

//GJApp类的作用???  继承 WindowAdapter

#2


1.
jPanel1.setBorder(BorderFactory.createRaisedBevelBorder());
2.
import com.borland.jbcl.layout.*;
...
jPanel1.setLayout(new XYLayout());
jPanel1.add(jbutton,  new XYConstraints(94, 16, 138, -1));
3.
Object类作为JTable每个格子存储的对象
GJApp加载应用程序,打开JFrame对象,设置窗口位置 
WindowAdapter可以接收窗口事件:
Method Summary 
 void windowActivated(WindowEvent e) 
          Invoked when a window is activated. 
 void windowClosed(WindowEvent e) 
          Invoked when a window has been closed. 
 void windowClosing(WindowEvent e) 
          Invoked when a window is in the process of being closed. 
 void windowDeactivated(WindowEvent e) 
          Invoked when a window is de-activated. 
 void windowDeiconified(WindowEvent e) 
          Invoked when a window is de-iconified. 
 void windowGainedFocus(WindowEvent e) 
          Invoked when the Window is set to be the focused Window, which means that the Window, or one of its subcomponents, will receive keyboard events. 
 void windowIconified(WindowEvent e) 
          Invoked when a window is iconified. 
 void windowLostFocus(WindowEvent e) 
          Invoked when the Window is no longer the focused Window, which means that keyboard events will no longer be delivered to the Window or any of its subcomponents. 
 void windowOpened(WindowEvent e) 
          Invoked when a window has been opened. 
 void windowStateChanged(WindowEvent e) 
          Invoked when a window state is changed. 

4。f.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);//这行是什么意思

setDefaultCloseOperation
public void setDefaultCloseOperation(int operation)
Sets the operation that will happen by default when the user initiates a "close" on this frame. You must specify one of the following choices: 

DO_NOTHING_ON_CLOSE (defined in WindowConstants): Don't do anything; require the program to handle the operation in the windowClosing method of a registered WindowListener object. 
HIDE_ON_CLOSE (defined in WindowConstants): Automatically hide the frame after invoking any registered WindowListener objects. 
DISPOSE_ON_CLOSE (defined in WindowConstants): Automatically hide and dispose the frame after invoking any registered WindowListener objects. 
EXIT_ON_CLOSE (defined in JFrame): Exit the application using the System exit method. Use this only in applications. 
The value is set to HIDE_ON_CLOSE by default. 

5。ResourceBundle可以动态绑定对象
按照字符串判别所需对象
Object getResource(String key)


#3


直接new Jpane(),然后把该对象frame.add(panel)
JPanel panel = new JPanel();
panel.setLayout(null);
JButton button = new JButton();
button.setBounds(100,100,100,30);
panel.add(button);
setbound()可以用来让你精确定位button,前面必须使panel的布局管理器为空

#4


问题是我不光光就一个Panel,是一个Top,Left,Main三个区域的图形,Top和Left用Panel,Main用JScrollPane放一个DefaultTableModel表格模型的JTable,所以,setBounds()的具体坐标老是搞不清楚。

#5


用XYLayout吧