如何为JTextArea的框架/边框着色?



我想做一个TextEditor,并试图改变一些颜色。但是我仍然很难改变JTextAreaJFrame的颜色(我的意思是这个白色边框),也不知道如何使这个文本区域的大小总是改变为所选的JFrame大小。

TextEditorPicture

TextEditorPicture2

public class TextEditor extends JFrame implements ActionListener {

JTextArea textArea;
JScrollPane scrollPane;
JLabel fontLabel;
JSpinner fontSizeSpinner;
JButton fontColorButton;
JComboBox fontBox;

JMenuBar menuBar;
JMenu fileMenu;
JMenuItem openItem;
JMenuItem saveItem;
JMenuItem exitItem;


TextEditor(){
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setTitle("TextEditor");
this.setSize(500,500);
this.setMinimumSize(new Dimension(500,0));
this.setMaximumSize(new Dimension(500, Integer.MAX_VALUE));
this.setVisible(true);
this.setLayout(new FlowLayout());
this.setLocationRelativeTo(null);
this.getContentPane().setBackground(Color.decode("#252025"));


//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.setMaximumSize(new Dimension(Integer.MAX_VALUE, Integer.MAX_VALUE));
scrollPane.setVisible(true);
scrollPane.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);


//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);
this.add(fontLabel);
this.add(fontSizeSpinner);
this.add(fontColorButton);
this.add(fontBox);
this.add(scrollPane);
this.setVisible(true);

}
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
if(e.getSource() == fontColorButton) {
JColorChooser colorChooser = new JColorChooser();
Color color = colorChooser.showDialog(null, "Color", Color.white);

}

if(e.getSource()==fontBox) {
textArea.setFont(new Font((String)fontBox.getSelectedItem(),Font.PLAIN,textArea.getFont().getSize()));
}

//Open
if(e.getSource()==openItem) {
JFileChooser fileChooser = new JFileChooser();
fileChooser.setCurrentDirectory(new File("."));
FileNameExtensionFilter filter = new FileNameExtensionFilter("Text Files", "txt");
fileChooser.setFileFilter(filter);

int response = fileChooser.showOpenDialog(null);
if(response==JFileChooser.APPROVE_OPTION) {
File file = new File(fileChooser.getSelectedFile().getAbsolutePath());
Scanner fileIn = null;


try {
fileIn = new Scanner(file);
if(file.isFile()) {
while(fileIn.hasNextLine()) {
String line = fileIn.nextLine()+"n";
textArea.append(line);

}
}
} catch (FileNotFoundException e1){
e1.printStackTrace();
} finally {
fileIn.close();
}
}


}

//Save
if(e.getSource()==saveItem) {
JFileChooser fileChooser = new JFileChooser();
fileChooser.setCurrentDirectory(new File("."));

int response = fileChooser.showSaveDialog(null);
if(response==JFileChooser.APPROVE_OPTION) {
File file;
PrintWriter fileOut = null;

file = new File(fileChooser.getSelectedFile().getAbsolutePath());
try {
fileOut = new PrintWriter(file);
fileOut.println(textArea.getText());
} catch (FileNotFoundException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} finally {
fileOut.close();
}
}
}

//Exit
if(e.getSource()==exitItem) {
System.exit(0);

}



}
}

你需要使用多种布局。只有FlowLayout是不够的。

BorderLayout的center组件将始终拉伸以填充容器的空间。

请记住,您可以在面板中放置面板。将字体和颜色标签/字段放在使用FlowLayout的JPanel中,然后将该JPanel放在使用BorderLayout的JPanel的NORTH区域中。你的JScrollPane属于同一个BorderLayout的中心。

删除对setPreferredSize, setMinimumSize和setMaximumSize的所有调用。它们干扰了布局管理器正确安排内容的能力。所有组件在创建时都有一个有用的首选大小。

要设置JScrollPane的大小,使用JTextArea的setRows和setColumns方法。JScrollPane父组件将参考它的Scrollable视图(即JTextArea)来确定它的首选大小。

相关内容

  • 没有找到相关文章

最新更新