我想使用填充的JTextArea组件向当前GridLayout添加网格。 它工作正常,但正如标题中所提到的,JTextArea不会自我调整大小 改变框架的大小后。
我已经对错误进行了本地化:
text.setLineWrap(true); //<--- here is the problem!!enter code here
。
这是我的代码:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
class GridLayoutExample {
private JFrame frame = new JFrame();
private JPanel panel = new JPanel();
private JScrollPane pane;
final JTextArea text = new JTextArea("Click me!\nClick me!\nClick me!\nClick me!\nClick me!");
GridLayoutExample() { createGui(); } //constrcutor
private JPanel createGui () {
panel.setLayout(new GridLayout(0, 2,0,0));
panel.add( new JLabel("Hello"));
//set style of first row, second column
text.setLineWrap(true); //<--- here is the problem!!
text.setEditable(true);
//enable mouse listening and allow mouse action
doMouseActions();
panel.add(text);
return panel;
}
void addNewRow() {
panel.add(new JLabel("Test1"));
panel.add(new JTextField("Test"));
}//addNewRow
void showFrame() {
pane = new JScrollPane(panel);
frame.add(pane);
frame.pack();
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}//showframe
void doMouseActions() {
text.addMouseListener(new MouseListener() {
@Override
public void mouseClicked(MouseEvent arg0) {
addNewRow();
}
@Override
public void mouseEntered(MouseEvent arg0) {
text.setBackground(Color.YELLOW);
}
@Override
public void mouseExited(MouseEvent arg0) {
text.setBackground(Color.WHITE);
}
@Override
public void mousePressed(MouseEvent arg0) {}
@Override
public void mouseReleased(MouseEvent arg0) {}
});
} // end of mouse action
public static void main(String[] args) {
GridLayoutExample test = new GridLayoutExample();
test.showFrame();
}// end of main
}// class GridLayoutExampleenter code here
一方面,当我禁用换行时,它工作正常,另一方面我需要 它是为了换行。
那么有什么建议可以做得更好吗?
非常感谢提前!
答案 0 :(得分:2)
您正在运行时添加组件。在这种情况下,您需要确保容器重新生效:
void addNewRow() {
panel.add(new JLabel("Test1"));
panel.add(new JTextField("Test"));
panel.revalidate();
panel.repaint();
}//addNewRow
此外,您应该仅在事件派发线程中创建和访问swing组件。有关详情,请参阅here。