我想问一下在Swing中处理UI元素的最佳方法是什么?
我尝试了不同的布局(BorderLayout
,FlowLayout
...)但是我可以快速处理元素,并在屏幕的那个位置处理我需要的内容。我使用方法setLocation(int x,int y)
但它不起作用。
我的意思是位置。我尝试了setLayout(null)它帮助了我,但是JTable列标题不可见。这是我的代码(可编辑)
public class Test1 extends JFrame{
public JTable tbGoods=new JTable();
public JScrollPane pane;
DefaultTableModel aModel;
public Test1(){
setTitle("Make buy");
setSize(600,600);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
getContentPane().setLayout(null);
setVisible(true);
DisplayAllGoods(null);
}
private void DisplayAllGoods(List<Object> objectList) {
aModel = new DefaultTableModel() {
@Override
public boolean isCellEditable(int row, int column) {
return true;
}
};
//setting the column name
Object[] tableColumnNames = new Object[3];
tableColumnNames[0]="User";
tableColumnNames[1]="Good";
tableColumnNames[2]="Price";
aModel.setColumnIdentifiers(tableColumnNames);
tbGoods.setAutoCreateRowSorter(true);
tbGoods.setBounds(93, 293, 388, 143);
pane=new JScrollPane(tbGoods);
getContentPane().add(tbGoods);
getContentPane().add(pane);
this.tbGoods.setModel(aModel);
}
public static void main(String[] args) {
JFrame gf=new Test1();
gf.setLocationRelativeTo(null);
gf.setVisible(true);}}
答案 0 :(得分:2)
最简单的方法就是说:
mySwingElement = null
如果要从面板中删除元素,可以尝试以下方法:
remove(int index);
你也可以使用:
mySwingElement.dispose()
它将释放与其相关的所有资源
如果你想让它们不可见:
setVisible(false);
答案 1 :(得分:0)
如果您想要摆动组件的绝对定位,您可能需要使用null
布局(请参阅here)。
答案 2 :(得分:0)
我解决了我的问题。我下载了Jigloo GUI编辑器并使用了AbsolutLayout组件(将元素放置在我想要的位置)并进入JScrollPane我放置了JTable。
public class NewJFrame2 extends javax.swing.JFrame {
private JScrollPane jScrollPane1;
private JTable jTable1;
/**
* Auto-generated main method to display this JFrame
*/
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
NewJFrame2 inst = new NewJFrame2();
inst.setLocationRelativeTo(null);
inst.setVisible(true);
}
});
}
public NewJFrame2() {
super();
initGUI();
}
private void initGUI() {
try {
setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
getContentPane().setLayout(null);
{
jScrollPane1 = new JScrollPane();
getContentPane().add(jScrollPane1);
jScrollPane1.setBounds(30, 37, 339, 176);
{
TableModel jTable1Model =
new DefaultTableModel(
new String[][] { { "One", "Two" }, { "Three", "Four" } },
new String[] { "Column 1", "Column 2" });
jTable1 = new JTable();
jScrollPane1.setViewportView(jTable1);
jTable1.setModel(jTable1Model);
}
}
pack();
setSize(400, 300);
} catch (Exception e) {
//add your error handling code here
e.printStackTrace();
}
}
}
答案 3 :(得分:0)
请阅读
1 / JTable吨示例http://www.java2s.com/Code/Java/Swing-JFC/CatalogSwing-JFC.htm
2 /将你的JTable放到JScrollPane
3 /并在开始时使用BorderLayout
开始放置JComponets