I can’t understand why the JScrollpane won’t be added to JTextArea, is this because of some sort of layout problem?
This is a text editor made by my friend, he initially made it with only AWT but I then replaced AWT TextArea with swing’s JTextArea to wrap text.
Output:
Edit: Thanks everyone who invested their time for me. I figured out that adding JTextArea to the Frame was the actual problem, as it was already added in JScrollPane; and JScrollPane was already added to Frame. So I just removed the line where I add JTextArea to the Frame, this line was written just above where I create Themes in my code.
import java.awt.*; import java.awt.event.*; import java.io.*; import javax.swing.*; //--------------------------------------- class MyFrame extends JFrame { // creating class name is 'Myframe' extending from 'JFrame' class MenuBar bar; Menu menu1, menu2, format_menu, font_size, theme; MenuItem new_item1, item2, item3, item4, item5, item6, item7, item8; MenuItem dracula, queen, dawn, light; MenuItem size_8, size_12, size_16, size_20, size_24, size_28; JTextArea jTextArea; String text; MyFrame() { setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setTitle("Untitled - CodePad"); // this is for shortcut keys MenuShortcut menuShortcut_new_item1 = new MenuShortcut(KeyEvent.VK_N); MenuShortcut menuShortcut_item2 = new MenuShortcut(KeyEvent.VK_O); MenuShortcut menuShortcut_item3 = new MenuShortcut(KeyEvent.VK_S); MenuShortcut menuShortcut_item4 = new MenuShortcut(KeyEvent.VK_X); MenuShortcut menuShortcut_item5 = new MenuShortcut(KeyEvent.VK_C); MenuShortcut menuShortcut_item6 = new MenuShortcut(KeyEvent.VK_V); MenuShortcut menuShortcut_item7 = new MenuShortcut(KeyEvent.VK_T); MenuShortcut menuShortcut_item8 = new MenuShortcut(KeyEvent.VK_A); // ------------------------------------------- // setting icon Image icon = Toolkit.getDefaultToolkit().getImage(".//res//icon.png"); setIconImage(icon); // bar = new MenuBar(); // creating object of menubar and giving it reference menu1 = new Menu("File");// creating object of menu as 'File' and giving it reference menu2 = new Menu("Edit");// creating object of menu as 'Edit' and giving it reference format_menu = new Menu("Format");// creating object of menu as 'Format' and giving it reference font_size = new Menu("Font Size");// creating object of menu as 'Font Size' and giving it reference theme = new Menu("Theme");// creating object of menu as 'Theme' and giving it reference //// creating object of MenuItem and giving it reference,and Passing arguments //// 'label','menushortcut' new_item1 = new MenuItem("New", menuShortcut_new_item1); item2 = new MenuItem("Open", menuShortcut_item2); item3 = new MenuItem("Save", menuShortcut_item3); item4 = new MenuItem("Exit", menuShortcut_item4); item5 = new MenuItem("Copy", menuShortcut_item5); item6 = new MenuItem("Paste", menuShortcut_item6); item7 = new MenuItem("Cut", menuShortcut_item7); item8 = new MenuItem("Select All", menuShortcut_item8); // ------------------done-------------- // creating menuItem for font size menu size_8 = new MenuItem("8"); size_12 = new MenuItem("12"); size_16 = new MenuItem("16"); size_20 = new MenuItem("20"); size_24 = new MenuItem("24"); size_28 = new MenuItem("28"); // -------------------done------------------- // creating menuItem for theme menu dracula = new MenuItem("Dracula"); queen = new MenuItem("Queen"); dawn = new MenuItem("Dawn"); light = new MenuItem("Light"); // creating menuItem for theme menu // adding new_item1,2,3,4 to menu1 ,that is new,open,save,exit menu1.add(new_item1); menu1.add(item2); menu1.add(item3); menu1.add(item4); // ------------------Done------------------- // adding item5,6,7,8 to menu2 ,that is copy,paste,cut,and select all menu2.add(item5); menu2.add(item6); menu2.add(item7); menu2.add(item8); // -------done--------------------------------------------------------- format_menu.add(font_size);// adding font_size menu to format menu so it becomes submenu // adding MenuItems to font_size menu font_size.add(size_8); font_size.add(size_12); font_size.add(size_16); font_size.add(size_20); font_size.add(size_24); font_size.add(size_28); // ---------done------------------------ // adding MenuItem to theme Menu------- theme.add(dracula); theme.add(queen); theme.add(dawn); theme.add(light); // ---------done------------------------ jTextArea = new JTextArea();// adding jTextArea jTextArea.setLineWrap(true); JScrollPane scroll = new JScrollPane(jTextArea, ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED, ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED); add(scroll); // adding menus to bar bar.add(menu1); bar.add(menu2); bar.add(format_menu); bar.add(theme); setMenuBar(bar); // settingmenubar as bar add(jTextArea);// adding text area // declaring some colors using rgb Color dracula_Color = new Color(39, 40, 34); Color green_Color = new Color(166, 226, 41); Color orange_Color = new Color(219, 84, 34); Color queen_Color = new Color(174, 129, 219); // setting default foreground color of jTextArea and setting font jTextArea.setForeground(Color.BLUE); jTextArea.setFont(new Font(Font.MONOSPACED, Font.BOLD, 15)); // setting size and location and visibility setSize(1000, 600); setLocationRelativeTo(null); setVisible(true); item2.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent event) { FileDialog dialog = new FileDialog(new Frame(), "Open", FileDialog.LOAD); // this will load the // fileDialog dialog.setVisible(true);// this will make dialog visible String path = dialog.getDirectory() + dialog.getFile(); // this will select the path of selected file // and put it into 'path' setTitle(dialog.getFile() + " - CodePad");// this will set Title to selected file name and -CodePad try { FileInputStream fi = new FileInputStream(path); byte b[] = new byte[fi.available()]; fi.read(b); String str = new String(b); // this will store b in str jTextArea.setText(str);// this will display text in 'str' in jTextArea fi.close();// this will close fi } catch (Exception e) { System.out.println("Something went Wrong :("); } } }); new_item1.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent event) { setTitle("Untitled - CodePad"); jTextArea.setText(" "); } }); item3.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent event) { FileDialog dialog = new FileDialog(new Frame(), "Save ", FileDialog.SAVE); dialog.setVisible(true); String path = dialog.getDirectory() + dialog.getFile(); setTitle(dialog.getFile() + "- CodePad"); try { FileWriter fw = new FileWriter(path); fw.write(jTextArea.getText()); fw.close(); } catch (Exception e) { System.out.println("Something went Wrong :("); } } }); item4.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent event) { // setVisible(false);//this will make frame invisible System.exit(0); } }); item5.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent event) { text = jTextArea.getSelectedText();// this will store selected text in to variable 'text' } }); item6.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent event) { jTextArea.insert(text, jTextArea.getCaretPosition()); // this will insert the text present in 'text' // variable at the carret position } }); item7.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent event) { text = jTextArea.getSelectedText(); // this will copy the selected text jTextArea.replaceRange("", jTextArea.getSelectionStart(), jTextArea.getSelectionEnd()); // this will put // "" // to selected // text } }); item8.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent event) { jTextArea.selectAll(); // this will select all the text in jTextArea } }); // ------------------------------------------------------------------------ // -------------------------------------------------------------------------- size_8.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent event) { jTextArea.setFont(new Font(Font.MONOSPACED, Font.BOLD, 8)); // this will change the size of text in // jTextArea to 8 } }); size_12.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent event) { jTextArea.setFont(new Font(Font.MONOSPACED, Font.BOLD, 12));// this will change the size of text in // jTextArea to 12 } }); size_16.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent event) { jTextArea.setFont(new Font(Font.MONOSPACED, Font.BOLD, 16));// this will change the size of text in // jTextArea to 16 } }); size_20.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent event) { jTextArea.setFont(new Font(Font.MONOSPACED, Font.BOLD, 20));// this will change the size of text in // jTextArea to 20 } }); size_24.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent event) { jTextArea.setFont(new Font(Font.MONOSPACED, Font.BOLD, 24));// this will change the size of text in // jTextArea to 24 } }); size_28.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent event) { jTextArea.setFont(new Font(Font.MONOSPACED, Font.BOLD, 28));// this will change the size of text in // jTextArea to 28 } }); // -------------------------------------------------------------------------- dracula.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent event) { jTextArea.setBackground(dracula_Color);// this will backgound to dracula jTextArea.setForeground(green_Color);// this will set foregrounf to green } }); queen.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent event) { jTextArea.setBackground(dracula_Color); jTextArea.setForeground(queen_Color); } }); dawn.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent event) { jTextArea.setBackground(Color.WHITE); jTextArea.setForeground(orange_Color); } }); light.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent event) { jTextArea.setBackground(Color.WHITE); jTextArea.setForeground(Color.BLUE); } }); // -------------------------------------------------------------------------- } } // --------------------------------------- public class CodePad_updated { public static void main(String[] args) { new MyFrame();// object } }
Advertisement
Answer
Are you new to Swing? I dont see you setting a contentpane. I also do not see you use the @Override command in your actionListeners.
Just as a few things I find suspicious. I normally create a new JFrame instead of extending it. And I consider extending JFrame a bad practice. But that is no universal opinion. Then you would add a panel to the frame and set it as contentPane. And then you can start adding everything to your panel, including other panels to help with UI Layout. Does the Textfield even show? Because I suspect it does not. Also you need to add the ScrollPane to your contentPane, not your Frame. I suggest to delete everything from your code in the post that is not relevant to your question, i.e. everything not related to the topic at hand.
Edit: have you tried adding the textArea to the Scrollpane? it would look something like this.
JTextArea text = new JTextArea(); JScrollPane newScroll = new JScrollPane(text);
Does that help you?