我正在从文件中读取信息并将其放在表格中。这个代码不是我的,但正是我需要的,所以我试着保留它并使它对我有用。我需要添加的是5-6个按钮和它们的功能,但对于使用SWING
来说还是全新的我很难完成两者 - 保留现有代码并在适当的位置添加按钮位置。
这是我的文件,第一部分是表格的制作地点,我尝试将代码包含在一个按钮中:
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:
我不是在寻找最好的外观和感觉,但如果我能保留当前代码并在底部的某处添加按钮,那将是非常好的。我尝试将按钮直接添加到main
frame.add(button)
的{{1}}框架中,但即使我设置了尺寸,按钮也占据了所有空间,而且桌子不再可见。
答案 0 :(得分:7)
您无法执行以下操作:
JScrollPane scrollpane = new JScrollPane(table);
scrollpane.add(button);//Add button
add(scrollpane);
因为滚动窗格只能有一个显示表格的Viewport。
我建议:
add(scrollpane, BorderLayout.CENTER );
和
JToolBar toolbar = new JToolBar();
toolbar.add( button1 );
toolbar.add( button2 );
toolbar.add( button3 );
...
add( toolbar, BorderLayout.NORTH );
查看JToolBar
的文档答案 1 :(得分:3)
使用swing布局管理器:http://zetcode.com/tutorials/javaswingtutorial/swinglayoutmanagement/
我建议您使用2个面板:一个用于您的桌面,另一个用于您的按钮,使用正确的布局,如上所述
答案 2 :(得分:2)
问题是您不必在set[Mininum|Maximum|Preferred]Size()
组件上调用Swing
方法(如果LayoutManager忽略其提示并且最终可能破坏布局本身,那些方法无效)。
这是因为在Swing
中Component
唯一有责任确定LayoutManager
儿童的正确人数Component
。请查看此thread以获取进一步说明,或访问Oracle的tutorial。
如果您需要正确布局组件,请向您的父LayoutManager
{{1}}添加一个。{/ p>
答案 3 :(得分:1)
我会为你节省很多头发和时间。
使用swing时,不应该看任何比GridBagLayout更多的东西。
相信我,了解如何使用GridBag。它看起来很复杂,会破裂。但它是唯一有用且值得学习的布局管理器,因为你最终可能会使用它......非常多。
所以,请记住 - http://docs.oracle.com/javase/tutorial/uiswing/layout/gridbag.html
答案 4 :(得分:0)
如果您需要快速制作GUI,我建议使用Netbeans GUI代码生成器,它使您能够拖放Java Swing元素。或者您可以安装Eclipse的WindowBuilder插件。
虽然这些“代码生成器”有点不受欢迎,但是你不需要自己学习如何格式化它们,它们在学习时很有用。
事实上,这些WYSIWYG编辑教我HTML。 :)