3

我正在从文件中读取信息并将其放在表格中。这个代码不是我的,但正是我需要的,所以我试图保留它并让它对我有用。SWING我需要添加的是 5-6 个按钮和它们的功能,但是对于与我一起工作的新手来说,我很难同时完成这两者 - 保留我现有的代码并将按钮添加到适当的位置。

这是我的文件,第一部分是表格的制作位置以及我尝试包含一个按钮的代码的位置:

public class DataFileTable extends JPanel {
  public DataFileTable(String dataFilePath) {
    JTable table;
    DataFileTableModel model;
    Font f;

    f = new Font("SanSerif",Font.PLAIN,24);
    setFont(f);
    setLayout(new BorderLayout());

    model = new DataFileTableModel(dataFilePath);

    table = new JTable();
    table.setModel(model);
    table.createDefaultColumnsFromModel();
    //Try to add button
    JButton button = new JButton("First Button");
    button.setSize(80,20);
    button.setVerticalAlignment(SwingConstants.BOTTOM);
    button.setHorizontalAlignment(SwingConstants.RIGHT);
    //End button part
    JScrollPane scrollpane = new JScrollPane(table);
    scrollpane.add(button);//Add button 
    add(scrollpane);

    }

第二部分主要是main功能:

public Dimension getPreferredSize(){ 

    return new Dimension(400, 300);
    }

 public static void main(String s[]) {
    JFrame frame = new JFrame("Data File Table");
    DataFileTable panel;

    panel = new DataFileTable("customers.dat");

    frame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
    frame.setForeground(Color.black);
    frame.setBackground(Color.lightGray);
    frame.getContentPane().add(panel,"Center");

    frame.setSize(panel.getPreferredSize());
    frame.setVisible(true);
    frame.addWindowListener(new WindowCloser());
    }
 }

class WindowCloser extends WindowAdapter {
 public void windowClosing(WindowEvent e) {
   Window win = e.getWindow();
   win.setVisible(false);
   System.exit(0);
    }
}

这是我使用此代码得到的 PrintScreen:

在此处输入图像描述

我不是在寻找最好的外观和感觉,但如果我可以保留当前代码并将按钮添加到底部某处,那就太好了。我尝试将按钮直接添加到框架表单中mainframe.add(button)但即使我设置了大小,按钮也会占用所有空间并且表格不再可见。

4

5 回答 5

7

您不能执行以下操作:

JScrollPane scrollpane = new JScrollPane(table);
scrollpane.add(button);//Add button 
add(scrollpane);

因为滚动窗格只能有一个显示表格的视口。

我建议:

add(scrollpane, BorderLayout.CENTER );

JToolBar toolbar = new JToolBar();
toolbar.add( button1 );
toolbar.add( button2 );
toolbar.add( button3 );
...
add( toolbar, BorderLayout.NORTH );

查看JToolBar的文档

于 2012-10-31T15:11:02.440 回答
3

使用摇摆布局管理器:http: //zetcode.com/tutorials/javaswingtutorial/swinglayoutmanagement/

我建议您使用 2 个面板:一个用于您的表格,另一个用于您的按钮,使用我上面所说的正确布局

于 2012-10-31T15:07:28.343 回答
2

问题是您不必调用组件set[Mininum|Maximum|Preferred]Size()上的方法Swing(如果 LayoutManager 忽略它们的提示并最终破坏布局本身,这些方法将无效)。

这是因为在Swing唯一负责建立正确大小的一个Component的孩子是LayoutManager。查看此线程以获得进一步的解释,或查看 Oracle 的教程

如果您需要正确布局组件,请在您的父级Component右侧添加一个LayoutManager.

于 2012-10-31T15:08:07.953 回答
1

我会为你节省很多头发和时间。

使用 Swing 时,不应该比 GridBagLayout 看得更远。

相信我,了解如何使用 GridBag。它看起来很复杂,它会破裂。但它是唯一有用且值得学习的布局管理器,因为您最终可能会使用它......很多。

所以,请记住 - http://docs.oracle.com/javase/tutorial/uiswing/layout/gridbag.html

于 2012-10-31T15:11:02.000 回答
0

如果您需要一种快速制作 GUI 的方法,我建议使用 Netbeans GUI 代码生成器,它使您能够拖放 Java Swing 元素。或者您可以为 Eclipse 安装 WindowBuilder 插件。

尽管这些“代码生成器”有些不受欢迎,因为您不需要自己学习如何格式化,它们在学习时很有用。

事实上,这些所见即所得的编辑器教会了我 HTML。:)

于 2012-10-31T20:37:05.733 回答