我總是在Java佈局方面遇到麻煩,但現在困擾我的主要原因是,當內容發生變化時,特別是對其大小進行更改時,它的佈局不正確。以下面的例子:讓Java Swing程序再次佈局
package layouttest;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextArea;
public class LayoutTestStart extends JFrame implements ActionListener
{
static JButton button= new JButton("Expand");
static JTextArea f = new JTextArea("A medium sized text");
static LayoutTestStart lst;
public static void main(String[] args) {
//Schedule a job for the event-dispatching thread:
//creating and showing this application's GUI.
javax.swing.SwingUtilities.invokeLater(new Runnable() {
public void run() {
createAndShowGUI();
}
});
}
public static void createAndShowGUI()
{
lst = new LayoutTestStart();
lst.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel all = new JPanel();
button.addActionListener(lst);
all.add(button);
all.add(f);
lst.getContentPane().add(all);
lst.setVisible(true);
lst.pack();
}
@Override
public void actionPerformed(ActionEvent e)
{
f.setText(f.getText()+"\n"+f.getText());
// this doesn't work
f.invalidate();
// this does but it's cheating
// lst.pack();
}
}
我得到這個工作的唯一方法是調用lst.pack(),但是這欺騙從那時起每個組件應該有一個參考,以它的JFrame,它就會變得混亂時,一個組件是一個單獨的課程。讓這個例子工作的首選方式是什麼?
到目前爲止,這看起來像我最好的選擇 – kresjer 2009-07-20 12:27:44