gpt4 book ai didi

java - 动态调整 JScrollPane 的大小?

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:17:58 25 4
gpt4 key购买 nike

我有两个文件。一个扩展 JFrame,另一个扩展 JPanel。每当我更改框架的大小时,无论是最大化、拖动还是其他,我都希望 ScrollPane 适合框架的当前大小。还有更多内容,还有一个顶部菜单栏和一个底部栏,但为了简单起见,我将它们排除在外。

基本上,我希望它像记事本一样工作。

现在,我在调用另一个类中的 setSize 方法的框架上使用 ComponentListener。setSize 方法只是:

public void resize(int x, int y)
{
textA.setPreferredSize(new Dimension(x, y-50));

areaScrollPane.setPreferredSize(new Dimension(x,y-50));
}

另外,供引用:

public void componentResized(ComponentEvent e)
{
textA.resize(panel.getWidth(),panel.getHeight());
}

仅供引用,由于我将它添加到框架的方式,它扩展了 JPanel:

panel = (JPanel) this.getContentPane();
panel.setLayout(new BorderLayout());
panel.add(textA, BorderLayout.CENTER);

那么最好的方法是什么?谢谢!

编辑:这是滚动 Pane 文件。它在我的主目录中称为 textA。

    public class TextArea extends JPanel
{

JTextArea textA=new JTextArea(500,500);

JScrollPane areaScrollPane = new JScrollPane(textA);
Toolkit toolkit = Toolkit.getDefaultToolkit ();
Dimension dim = toolkit.getScreenSize();
Dimension dim2=(new Dimension((int)(dim.getWidth()),(int)(dim.getHeight()-120)));
public TextArea()
{
//textA.setLineWrap(true);
//textA.setWrapStyleWord(true);
textA.setEditable(true);
textA.setForeground(Color.WHITE);

textA.setBackground(Color.DARK_GRAY);
this.setFont(null);



areaScrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
areaScrollPane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
areaScrollPane.setMinimumSize(new Dimension(300,300));
areaScrollPane.setSize(new Dimension(800,800));
textA.setPreferredSize(dim2);
areaScrollPane.setPreferredSize(dim2);
areaScrollPane.setMaximumSize(dim2);
add(areaScrollPane);
}


@Override
public void resize(int x, int y)
{
textA.setPreferredSize(new Dimension(x, y-50));
areaScrollPane.setPreferredSize(new Dimension(x,y-50));
}

}

和主要的:

    public class JEdit extends JFrame implements ComponentListener

{
TextArea textA=new TextArea();
JPanel panel;
/**
* @param args the command line arguments
*/
public static void main(String[] args)
{

JEdit run=new JEdit();

}

public JEdit()
{

setTitle("JEdit");
setLayout(new BorderLayout());
setSize(1100, 1000);

this.setMinimumSize(new Dimension(100,100));
//setBackground(Color.BLACK);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (ClassNotFoundException ex) {
System.out.println("error1");
} catch (InstantiationException ex) {
System.out.println("error2");
} catch (IllegalAccessException ex) {
System.out.println("error3");
} catch (UnsupportedLookAndFeelException ex) {
System.out.println("error4");
}

panel = (JPanel) this.getContentPane();
panel.setLayout(new BorderLayout());
//TopBar top=new TopBar();
// PositionBar posB=new PositionBar();
panel.add(textA, BorderLayout.CENTER);




// add(top,BorderLayout.NORTH);
// add(posB,BorderLayout.SOUTH);




addComponentListener(this);
setVisible(true);

}



public void componentResized(ComponentEvent e)
{
textA.resize(panel.getWidth(),panel.getHeight());
}

public void componentMoved(ComponentEvent e) {
textA.resize(panel.getWidth(),panel.getHeight());
}

public void componentShown(ComponentEvent e) {
textA.resize(panel.getWidth(),panel.getHeight());
}

public void componentHidden(ComponentEvent e) {
textA.resize(panel.getWidth(),panel.getHeight());
}



}

最佳答案

关于您发布的代码,首先摆脱对 setSize 的所有调用——这些在使用布局管理器时通常不被尊重,并且摆脱所有 ComponentListener 的东西,因为它是多余的,因为您正在使用布局管理器来调整大小。不过,我看到的最大问题是您允许 TextArea JPanel 使用其默认布局,即 FlowLayout,这样做会阻止它持有的 JScrollPane 调整大小。给这个类一个 BorderLayout(或者更好的是简单地从类中返回一个 JScrollPane),你就设置好了。例如通过快速修改和重命名类以防止与标准 Java 类发生冲突,

import java.awt.*;
import javax.swing.*;

@SuppressWarnings("serial")
public class JEdit2 extends JFrame {
TextArea2 textA = new TextArea2();
JPanel panel;

public static void main(String[] args) {
new JEdit2();
}

public JEdit2() {
setTitle("JEdit 2");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
panel = (JPanel) this.getContentPane();
panel.add(textA, BorderLayout.CENTER);

pack(); //!! added
setLocationRelativeTo(null);
setVisible(true);
}

}

@SuppressWarnings("serial")
class TextArea2 extends JPanel {
JTextArea textA = new JTextArea(500, 500); // !! this is one friggin' huge JTextArea!
JScrollPane areaScrollPane = new JScrollPane(textA);

public TextArea2() {
textA.setEditable(true);
textA.setForeground(Color.WHITE);
textA.setBackground(Color.DARK_GRAY);
this.setFont(null);

setLayout(new BorderLayout()); //!! added
add(areaScrollPane, BorderLayout.CENTER);
}
}

关于java - 动态调整 JScrollPane 的大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6240682/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com