如何修改JTextArea的边框颜色并实现其随JFrame大小自动适配?
问题1:修改JTextArea外层白色边框颜色
你看到的白色边框是包裹JTextArea的JScrollPane默认自带的边框,直接设置JScrollPane的边框属性即可,示例为设置和背景色一致实现隐藏效果,你也可以自定义为其他颜色:
在你初始化scrollPane的代码块中添加以下代码:
scrollPane.setBorder(BorderFactory.createLineBorder(Color.decode("#252025"));
如果需要调整JTextArea的内边距,也可以同时给textArea设置无边距边框:
textArea.setBorder(BorderFactory.createEmptyBorder(4,4,4,4));
注:编译时如果提示找不到BorderFactory,需要在代码顶部引入对应包:import javax.swing.BorderFactory;
问题2:实现JTextArea随窗口大小自动适配
你当前使用的FlowLayout为流式布局,仅会按组件预设尺寸排列,不会自动拉伸适配窗口,修改布局方案即可:
- 将JFrame的布局从
FlowLayout替换为BorderLayout - 把顶部的字体设置类控件放到单独的JPanel中,将该JPanel放置在窗口顶部区域
- 把
scrollPane放置在BorderLayout的CENTER区域,该区域会自动占满窗口剩余空间 - 删除你给JFrame设置的最大宽度限制
this.setMaximumSize(new Dimension(500, Integer.MAX_VALUE));,否则窗口无法拉宽调整
修改后的核心初始化代码片段:
TextEditor(){ this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.setTitle("TextEditor"); this.setSize(500,500); this.setMinimumSize(new Dimension(500,400)); // 删除原最大宽度限制 this.setLocationRelativeTo(null); this.getContentPane().setBackground(Color.decode("#252025")); // 替换布局为BorderLayout this.setLayout(new BorderLayout()); // ========== 原有其他控件初始化代码保持不变 ========== //Text Area textArea = new JTextArea(); textArea.setVisible(true); textArea.setLineWrap(true); textArea.setWrapStyleWord(true); textArea.setFont(new Font("SF Mono Regular 11", Font.PLAIN,20)); textArea.setBackground(Color.decode("#252025")); textArea.setForeground(Color.decode("#eaeaea")); //Scroll Panel Sidebar scrollPane = new JScrollPane(textArea); scrollPane.setPreferredSize(new Dimension(500,500)); scrollPane.setMinimumSize(new Dimension(500,0)); scrollPane.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS); // 新增:修改scrollPane边框颜色 scrollPane.setBorder(BorderFactory.createLineBorder(Color.decode("#252025")); //Font Text fontLabel = new JLabel("Font: "); fontLabel.setForeground(Color.decode("#eaeaea")); //Font Size Spinner fontSizeSpinner = new JSpinner(); fontSizeSpinner.setPreferredSize(new Dimension(50,25)); fontSizeSpinner.setValue(20); fontSizeSpinner.getEditor().getComponent(0).setBackground(Color.decode("#252025")); fontSizeSpinner.addChangeListener(new ChangeListener() { @Override public void stateChanged(ChangeEvent e) { textArea.setFont(new Font("SF Mono Regular 11",Font.PLAIN,(int) fontSizeSpinner.getValue())); textArea.setSelectedTextColor(Color.white); } }); fontColorButton = new JButton("Color"); fontColorButton.setBackground(Color.decode("#252025")); fontColorButton.setOpaque(true); fontColorButton.setBorderPainted(false); fontColorButton.addActionListener(this); fontColorButton.setForeground(Color.decode("#eaeaea")); String[] fonts = GraphicsEnvironment.getLocalGraphicsEnvironment().getAvailableFontFamilyNames(); //Font Change Box fontBox = new JComboBox(fonts); fontBox.addActionListener(this); fontBox.setBackground(Color.decode("#252025")); fontBox.setForeground(Color.green); fontBox.setOpaque(true); fontBox.setEditable(true); fontBox.getEditor().getEditorComponent().setBackground(Color.decode("#252025")); ((JTextField) fontBox.getEditor().getEditorComponent()).setBackground(Color.decode("#252025")); fontBox.setSelectedItem("SF Mono Regular 11"); //Menubar menuBar = new JMenuBar(); fileMenu = new JMenu("File"); openItem = new JMenuItem("Open"); saveItem = new JMenuItem("Save"); exitItem = new JMenuItem("Exit"); openItem.addActionListener(this); saveItem.addActionListener(this); exitItem.addActionListener(this); fileMenu.add(openItem); fileMenu.add(saveItem); fileMenu.add(exitItem); menuBar.add(fileMenu); this.setJMenuBar(menuBar); // ========== 原有控件初始化代码结束 ========== // 新增:顶部功能栏容器 JPanel topPanel = new JPanel(); topPanel.setBackground(Color.decode("#252025")); topPanel.add(fontLabel); topPanel.add(fontSizeSpinner); topPanel.add(fontColorButton); topPanel.add(fontBox); // 调整控件添加逻辑 this.add(topPanel, BorderLayout.NORTH); this.add(scrollPane, BorderLayout.CENTER); this.setVisible(true); }
内容的提问来源于stack exchange,提问作者Burak Ertan
相关产品推荐
相关产品推荐

