请教Java Swing中JTextarea问题

请问如果控制JTextArea,使其弹出的时候窗口不超过屏幕之外。

8个回答

简单的例子

[code="java"]
import java.awt.BorderLayout;
import java.awt.Frame;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;

public class TextareaTest {

public static void main(String[] args) {

    final JFrame frame = new JFrame("Textarea");
    final JDialog dialog = new TextareaDialog(frame, true);

    JButton button = new JButton("Click Me!");
    button.addActionListener(new ActionListener() {

        @Override
        public void actionPerformed(ActionEvent e) {
            dialog.setLocationRelativeTo(frame);
            dialog.pack();
            dialog.setSize(300, 200);
            dialog.setVisible(true);
        }
    });
    frame.getContentPane().add(button, BorderLayout.CENTER);

    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setLocationRelativeTo(null);
    frame.pack();
    frame.setVisible(true);
}

}

class TextareaDialog extends JDialog {

JTextArea textarea = new JTextArea();

public TextareaDialog(Frame owner, boolean modal) {
    super(owner, modal);

    // 初始化
    setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
    setTitle("文本框测试");

    // 添加文本框。
    textarea.setLineWrap(true);
    JScrollPane scroll = new JScrollPane(textarea);
    getContentPane().add(scroll, BorderLayout.CENTER);

    // ====-------------------------------测试数据。
    String text = "长长的测试数据";
    for (int i = 0; i <= 1000; i++) {
        text += "好长";
    }
    textarea.setText(text);
}

}
[/code]

java swing mdi这个可以解决的:
[url]http://blog.sina.com.cn/s/blog_6f07b6eb0100oi97.html[/url]

iteye_5246
iteye_5246 或者自定义弹出的坐标,控制在平面坐标-窗体大小
7 年多之前 回复

获取屏幕比例或者分辨率,动态设置它的大小

这个JTextArea肯定是放在某个container里的,
[quote]弹出的时候窗口不超过屏幕之外[/quote]

所以不应该是控制JTextArea,而应该是控制那个窗口(JFrame或 JWindow),调用setSize()。
(除非你们的代码中硬性撑大窗口)

如果是要控制JTextArea的尺寸,取决于使用的layout manager.

  1. 如果使用了,设置setPreferredSize()。

  2. 如果没有使用layout manager,设置setSize()。

建议是两个都设置下。

j_clxy
clxy大叔 我搞错了。加JScrollPane是正解。
7 年多之前 回复

我表示没看懂。。。。。。
JTextArea仅仅是个文本区控件,是需要放到容器中的,怎么会弹出呢?
下面回答的增加滚动条,使用mdi我更不理解。。。。。。

请详细描述,或者直接贴代码

Dead_Knight
Dead_Knight 你果然闲……一般dialog都会设置size的。
7 年多之前 回复
j_clxy
clxy大叔 我试出那种效果了。 不设size,不设换行,不加scrollpanel,就会撑到最大。 ...闲,好闲...
7 年多之前 回复
Dead_Knight
Dead_Knight 不会的啊,只要设置了dialog的size,就固定了啊,不可能撑到最大的。 dialog.setSize(300, 200);
7 年多之前 回复
j_clxy
clxy大叔 如果不做控制,不加布局管理器,不加scrollpanel,什么都不处理,直接按上去的话。 textarea默认会显示所有内容(如果不让换行会只一行显示),内容一多,就把父容器(他这里是JDialog)撑到最大。
7 年多之前 回复

在JDialog构造方法中加入下面的语句:
[code="java"]
this.setResizable(false);
this.setSize(354, 126);
Dimension lSize = Toolkit.getDefaultToolkit().getScreenSize();
Dimension lCsize = this.getSize();
this.setLocation( (int) ( (lSize.getWidth() - lCsize.getWidth()) / 2),
(int) ( (lSize.getHeight() - lCsize.getHeight()) / 2));
[/code]

Dead_Knight
Dead_Knight this.setSize(354, 126);这句可注释掉,我是复制我以前的某个对话框。
7 年多之前 回复

不知道提问者到底想问啥。
如果是问dialog不位于屏幕中央,就按照我这个设置
[code="java"]
this.setResizable(false);
this.setSize(300, 150);
Dimension lSize = Toolkit.getDefaultToolkit().getScreenSize();
Dimension lCsize = this.getSize();
this.setLocation( (int) ( (lSize.getWidth() - lCsize.getWidth()) / 2),
(int) ( (lSize.getHeight() - lCsize.getHeight()) / 2));
[/code]

如果是想问JTextArea的问题,那你看看clxy的代码,对JTextArea的知识就有些了解了。

j_clxy
clxy大叔 屏幕中央的话,简单的写法是 setLocationRelativeTo(父容器)//桌面的话,父容器=null
7 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问