Thend
Thend

Reputation: 313

BorderLayout combined with FlowLayout: JTextArea ruins GUI (Java Swing)

I use a BorderLayout combined with a FlowLayout, which works perfectly when I set up the BorderLayout.NORTH. However, in the CENTER area I would like to add a JTextArea (to print out console), but when I create a panel, add JTextArea, after adding a panel to BorderLayout.CENTER nothing appears and became grey. I have tried several combinations and tricks, also I have checked several forum posts without luck. Here is my very simplified code (should run flawlessly, I have commented the problematic part if you remove the comment the bug present):

public static void main(String[] args) {
        
        blogGUI();
        
    }
        
    public static void blogGUI() {
        
        JFrame frame = new JFrame("test");
        frame.setDefaultCloseOperation(EXIT_ON_CLOSE);
        frame.setResizable(false);
        frame.setVisible(true);
        frame.setSize(700, 500);
        
        frame.setLayout(new BorderLayout()); //a frame BorderLayout elrendezésü
        
        JPanel panel1 = new JPanel();
        //panel.setBounds(0,0,700,500);    
        panel1.setBackground(new java.awt.Color(255,255,255)); 
        panel1.setVisible(true);
        panel1.setSize(new Dimension(140, 30));
        
        JPanel panel2 = new JPanel();
        //panel.setBounds(0,0,700,500);    
        panel2.setBackground(new java.awt.Color(255,255,255)); 
        panel2.setVisible(true);
        panel2.setSize(new Dimension(140, 30));
                
        JButton btNewEntry = new JButton("New Post");
        JButton btModifyEntry = new JButton("Modify");
        JButton btDeleteEntry = new JButton("Delete");
        JButton btShowEntries = new JButton("List");
        JButton btExit = new JButton("Exit");
        
        JLabel lbFile = new JLabel("Open Blog:");
        JLabel lbFilePath = new JLabel("Nothing selected...");
        JButton btFileOpen = new JButton("Open");
        
        btNewEntry.setPreferredSize(new Dimension(100,30));
        btModifyEntry.setPreferredSize(new Dimension(100,30));
        btDeleteEntry.setPreferredSize(new Dimension(100,30));
        btShowEntries.setPreferredSize(new Dimension(100,30));
        btExit.setPreferredSize(new Dimension(100,30));
        
        lbFile.setPreferredSize(new Dimension(100,30));
        lbFilePath.setPreferredSize(new Dimension(310,30));
        btFileOpen.setPreferredSize(new Dimension(100,30));
        
        panel1.add(btNewEntry);
        panel1.add(btModifyEntry);
        panel1.add(btDeleteEntry);
        panel1.add(btShowEntries);
        panel1.add(btExit);
        
        panel2.add(lbFile);
        panel2.add(btFileOpen);
        panel2.add(lbFilePath);
        
        JPanel cpanelNorth = new JPanel();
        cpanelNorth.setBackground(new java.awt.Color(135,206,250));
        cpanelNorth.setLayout(new FlowLayout());
        cpanelNorth.setPreferredSize(new Dimension(500, 95));
        
        cpanelNorth.add(panel1);
        cpanelNorth.add(panel2);
        
        frame.add(cpanelNorth, BorderLayout.NORTH);
        
        /*Something wrong here! From this point, if this uncommented ruins the gui.*/
        
        JPanel panel3 = new JPanel();
        panel3.setLayout(new FlowLayout());
        //panel.setBounds(0,0,700,500);    
        panel3.setBackground(new java.awt.Color(255,255,255)); 
        //panel3.setVisible(true);
        //panel3.setPreferredSize(new Dimension(30, 30));
        
        JTextArea textArea = new JTextArea("Welcome to...!");
        //textArea.setPreferredSize(new Dimension(50,50));
        textArea.setBackground(new java.awt.Color(255,0,0));
        
        panel3.add(textArea);
        frame.add(panel3, BorderLayout.CENTER);

Upvotes: 0

Views: 511

Answers (1)

Thend
Thend

Reputation: 313

Hi Andrew Thompson and user16320675, Thanks for the quick help, this solved my issue. How can I further improve the quality the code? I had to put only one setPrefferedSize() at the JTextArea, all other places I removed (without this the window shrinks to zero)

  1. I reduced my code
  2. image: https://ibb.co/Xj7tYKf
  3. I have removed allsetPrefferedSize()
  4. I put frame.setVisible(true) at the end, and also frame.pack() at the end

Here is my code:

package bloggui;

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.FlowLayout;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextArea;

public class Start {


public static void main(String[] args) {
        
        blogGUI();
        
    }
        
    public static void blogGUI() {
        
        JFrame frame = new JFrame();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        
        frame.setLayout(new BorderLayout());
        
        JPanel panel1 = new JPanel(); 
        panel1.setBackground(new java.awt.Color(255,255,255)); 
        
        JPanel panel2 = new JPanel();  
        panel2.setBackground(new java.awt.Color(255,255,255)); 
                
        JButton btNewEntry = new JButton("New Post");
        JButton btModifyEntry = new JButton("Modify");
        JButton btDeleteEntry = new JButton("Delete");
        JButton btShowEntries = new JButton("List");
        JButton btExit = new JButton("Exit");
        
        JLabel lbFile = new JLabel("Open Blog:");
        JLabel lbFilePath = new JLabel("Nothing selected...");
        JButton btFileOpen = new JButton("Open");
        
        panel1.add(btNewEntry);
        panel1.add(btModifyEntry);
        panel1.add(btDeleteEntry);
        panel1.add(btShowEntries);
        panel1.add(btExit);
        
        panel2.add(lbFile);
        panel2.add(btFileOpen);
        panel2.add(lbFilePath);
        
        JPanel cpanelNorth = new JPanel();
        cpanelNorth.setBackground(new java.awt.Color(135,206,250));
        cpanelNorth.setLayout(new FlowLayout());
        
        cpanelNorth.add(panel1);
        cpanelNorth.add(panel2);
        
        frame.add(cpanelNorth, BorderLayout.NORTH);
        frame.pack();
        
        JPanel panel3 = new JPanel();
        panel3.setLayout(new FlowLayout());   
        panel3.setBackground(new java.awt.Color(135,206,250));
        
        JTextArea textArea = new JTextArea("Welcome to...!");
        textArea.setBackground(new java.awt.Color(255,255,255));
        textArea.setPreferredSize(new Dimension(620, 400));     //Must not use setPreferredSize() [I must use it only once here!]
        
        panel3.add(textArea);
        frame.add(panel3, BorderLayout.CENTER);
        
        
        frame.pack();           //Must be at the end
        frame.setVisible(true); //Must be at the end
        
     }


}

Upvotes: 0

Related Questions