I'm working on a JFrame application to save data with many different panels, labels and buttons. I want it so whenever data is added, it should refresh the page. It doesn't seem to work though?
Here is the repaint code:
//Refreshes mainFrame
if (startUp == true) {
mainFrame.setVisible(true);
startUp = false;
} else {
System.out.println("repaint");
mainFrame.repaint();
}
Here's my full code:
UserInterface.java
package groupid;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.Image;
import java.awt.Toolkit;
import java.awt.datatransfer.DataFlavor;
import java.awt.datatransfer.UnsupportedFlavorException;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.IOException;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.ScrollPaneConstants;
import javax.swing.SwingUtilities;
import org.json.simple.JSONObject;
public class UserInterface {
static Boolean startUp = true;
//Sort Options - Different Ways to Short Data
static String sortOptions[] = {"A - Z","Z - A","Recently Created","Oldest Created","Recently Modified"};
//Main Frame Components
static ImageIcon icon;
static JFrame mainFrame;
static JPanel mainPanel;
static JScrollPane mainScrollPane;
//Main Panel Components
static JPanel rightPanel;
static JPanel sidePanel;
//Right Panel Components
static JPanel topPanel;
static JPanel searchPanel;
static JLabel searchLabel;
static JTextField searchBar;
static JPanel sortPanel;
static JLabel sortByLabel;
static JPanel bottomPanel;
static JPanel addButtonPanel;
static JButton addButton;
static JPanel flowPanel;
static JPanel titlePanel;
static JLabel titleLabel;
static JTextArea valueLabel;
static String clipboardString;
static Boolean pasteBool;
public static void main(String[] args) {
Database.startUp();
UserInterface.jFrameRefresh();
}
public static void jFrameRefresh(){
if (startUp == true) {
mainFrame = new JFrame(); // Creates our main frame
mainFrame.setSize(1600, 900);
mainFrame.setTitle("ClippyBoards");
mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
mainFrame.setResizable(true);
mainFrame.setFocusable(true);
mainFrame.setLayout(new BorderLayout(10,0));
mainFrame.addWindowListener(new WindowAdapter() { // Exits out of application
@Override
public void windowClosing(WindowEvent e) {
Database.saveFile();
mainFrame.dispose();
}
});
// Ctrl-V Ability
mainFrame.addKeyListener(new KeyAdapter() {
@Override
public void keyReleased(KeyEvent e) {
if(e.getKeyCode() == KeyEvent.VK_V && (e.getModifiersEx() & KeyEvent.CTRL_DOWN_MASK) != 0) {
try {
clipboardString = (String) Toolkit.getDefaultToolkit().getSystemClipboard().getData(DataFlavor.stringFlavor);
} catch (UnsupportedFlavorException | IOException e1) {
e1.printStackTrace();
}
pasteBool = true;
new AddToClippyBoard();
pasteBool = false;
}
}
});
icon = new ImageIcon("EggSMP.png");
mainFrame.setIconImage(icon.getImage());
mainFrame.getContentPane().setBackground(new Color(100,100,100));
}
// Right Panel - Panel that holds bottom panel and main panel
rightPanel = new JPanel(new BorderLayout(5,5));
rightPanel.setBackground(new Color(150,150,150));
rightPanel.setPreferredSize(new Dimension(1200,500));
mainFrame.add(rightPanel,BorderLayout.CENTER);
mainPanel = new JPanel(new FlowLayout(FlowLayout.CENTER,20,20));
mainPanel.setBackground(new Color(230,230,230));
mainScrollPane = new JScrollPane(mainPanel);
mainScrollPane.createVerticalScrollBar();
mainScrollPane.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
mainScrollPane.getVerticalScrollBar().setUnitIncrement(20);
rightPanel.add(mainScrollPane); // adds mainPanel, with scroll bar
System.out.println(Database.jsonArray.size());
// Flow Panels - Shows all saved data
loadClippy();
if (valueLabel == null) {
mainPanel.setPreferredSize(new Dimension(1000,Database.jsonArray.size()*(400+20)+50));
} else {
mainPanel.setPreferredSize(new Dimension(1000,Database.jsonArray.size()*(60 + (valueLabel.getLineCount()*18)+20)+50));
}
// Side Panel - Navigate and organize folders
sidePanel = new JPanel(new FlowLayout());
sidePanel.setPreferredSize(new Dimension(500,100));
sidePanel.setBackground(new Color(220,228,232));
mainFrame.add(sidePanel,BorderLayout.WEST);
//Top Panel - Search Bar & Sorting Options
topPanel = new JPanel(new BorderLayout());
topPanel.setPreferredSize(new Dimension(1000,50));
topPanel.setBackground(new Color(230,230,230));
rightPanel.add(topPanel,BorderLayout.NORTH);
//Search Panel - Holds Search Bar
searchPanel = new JPanel(new FlowLayout(FlowLayout.TRAILING,5,12));
searchPanel.setPreferredSize(new Dimension(500,50));
searchPanel.setBackground(new Color(230,230,230));
topPanel.add(searchPanel,BorderLayout.EAST);
//Search Label
searchLabel = new JLabel();
searchLabel.setFont(new Font("Arial",Font.BOLD,20));
searchLabel.setText("Search:");
searchPanel.add(searchLabel);
//Search Bar - Search for Items within
searchBar = new JTextField();
searchBar.setPreferredSize(new Dimension(250,30));
searchBar.setBackground(new Color(250,250,250));
searchBar.setFont(new Font("Arial",Font.PLAIN,20));
searchPanel.add(searchBar);
//Sort Panel - Holds Sort Filter
sortPanel = new JPanel(new FlowLayout(FlowLayout.LEADING,5,12));
sortPanel.setPreferredSize(new Dimension(600,50));
sortPanel.setBackground(new Color(230,230,230));
topPanel.add(sortPanel,BorderLayout.WEST);
//Sort Label
icon = new ImageIcon(new ImageIcon("SortBlack.png").getImage().getScaledInstance(30, 30, Image.SCALE_DEFAULT));
sortByLabel = new JLabel();
sortByLabel.setFont(new Font("Arial",Font.BOLD,20));
sortByLabel.setText("Sort By:");
sortByLabel.setIcon(icon);
sortPanel.add(sortByLabel);
//sort Filter - Sorts data by selected filter
JComboBox<String> sortBy = new JComboBox<String>(sortOptions);
sortBy.setPreferredSize(new Dimension(200,30));
sortBy.setFont(new Font("Arial",Font.PLAIN,20));
sortPanel.add(sortBy);
// Bottom Panel - Undecided
bottomPanel = new JPanel(new BorderLayout());
bottomPanel.setPreferredSize(new Dimension(100,50));
bottomPanel.setBackground(new Color(220,228,232));
rightPanel.add(bottomPanel,BorderLayout.SOUTH);
// Button Panel - Holds Add Button
addButtonPanel = new JPanel();
addButtonPanel.setPreferredSize(new Dimension(50,50));
addButtonPanel.setBackground(new Color(220,228,232));
bottomPanel.add(addButtonPanel,BorderLayout.EAST);
// Add Button - Will open window to import new info
addButton = new JButton("+");
addButton.setFont(new Font("Arial",Font.BOLD,20));
addButton.setAlignmentX(JPanel.CENTER_ALIGNMENT);
addButton.setAlignmentY(JPanel.CENTER_ALIGNMENT);
addButtonPanel.add(addButton);
addButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
if(e.getSource()==addButton) {
pasteBool = false;
new AddToClippyBoard();
}
}
});
//Refreshes mainFrame
if (startUp == true) {
mainFrame.setVisible(true);
startUp = false;
} else {
System.out.println("repaint");
mainFrame.repaint();
}
}
public static void loadClippy() {
for (int i = 0; i < Database.jsonArray.size(); i++) {
JSONObject tempObject = (JSONObject) Database.jsonArray.get(i);;
flowPanel = new JPanel(new BorderLayout());
flowPanel.setPreferredSize(new Dimension(1000,400));
flowPanel.setBackground(new Color(220,220,220));
mainPanel.add(flowPanel);
titlePanel = new JPanel(new BorderLayout());
titlePanel.setPreferredSize(new Dimension(1000,50));
titlePanel.setBackground(new Color(220,220,220));
flowPanel.add(titlePanel,BorderLayout.NORTH);
titleLabel = new JLabel();
titleLabel.setFont(new Font("Arial",Font.BOLD,25));
titleLabel.setText(tempObject.get("name").toString());
titlePanel.add(titleLabel);
valueLabel = new JTextArea();
valueLabel.setFont(new Font("Arial",Font.PLAIN,15));
valueLabel.setBackground(new Color(220,220,220));
valueLabel.setLineWrap(true);
valueLabel.setWrapStyleWord(true);
valueLabel.setEditable(false);
valueLabel.setText(tempObject.get("value").toString());
flowPanel.setPreferredSize(new Dimension(1000,60 + (valueLabel.getLineCount()*18)));
flowPanel.add(valueLabel);
}
}
public static void dispose() {
mainFrame.dispose();
}
}
Database.java
package groupid;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
import org.json.simple.parser.JSONParser;
public class Database {
static String path = "C:/Users/Edison Cai/Downloads/temp.json"; //Path to saved file
static JSONArray jsonArray = new JSONArray(); // Creates our JSONArray
static SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
// Imports or creates JSONArray to be used in the program
public static void startUp() {
JSONParser parser = new JSONParser();
if (new File(path).exists()) {
try {
jsonArray = (JSONArray) parser.parse(new FileReader(path)); //Reads and parses file
System.out.println(jsonArray);
} catch (Exception e) {
e.printStackTrace();
}
}
}
public static void addToDatabase(String name, String value) {
JSONObject jsonObject = new JSONObject();
jsonObject.put("name", name);
jsonObject.put("value", value);
String date = dateFormat.format(new Date()).toString();
jsonObject.put("date", date);
jsonArray.add(jsonObject);
System.out.println(jsonArray);
}
//Saves JSONArray to computer
public static void saveFile() {
try {
FileWriter fileWriter = new FileWriter(path);
fileWriter.write(jsonArray.toJSONString());
fileWriter.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
AddToClippyBoard.java
package groupid;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ComponentAdapter;
import java.awt.event.ComponentEvent;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.ScrollPaneConstants;
public class AddToClippyBoard {
JFrame addFrame = new JFrame();
JPanel bottomPanel;
JPanel topPanel;
JTextArea valueTextArea;
JTextField nameTextArea;
JScrollPane valueScrollPane;
JButton submitButton;
String name;
String value;
AddToClippyBoard() {
if (UserInterface.pasteBool == false) {
addFrame.setSize(400, 600);
addFrame.setTitle("Add to ClippyBoard");
addFrame.setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE); // Exits out of application
addFrame.setResizable(true);
addFrame.setLayout(new BorderLayout());
addFrame.setVisible(true);
topPanel = new JPanel();
topPanel.setPreferredSize(new Dimension(400,250));
topPanel.setBackground(new Color(230,230,230));
addFrame.add(topPanel,BorderLayout.CENTER);
bottomPanel = new JPanel(new FlowLayout(FlowLayout.TRAILING));
bottomPanel.setPreferredSize(new Dimension(400,50));
bottomPanel.setBackground(new Color(220,228,232));
addFrame.add(bottomPanel,BorderLayout.SOUTH);
nameTextArea = new JTextField();
nameTextArea.setPreferredSize(new Dimension(addFrame.getWidth()-50,40));
nameTextArea.setFont(new Font("Arial",Font.BOLD,20));
topPanel.add(nameTextArea);
valueTextArea = new JTextArea();
valueTextArea.setPreferredSize(new Dimension(addFrame.getWidth()-50,180));
valueTextArea.setFont(new Font("Arial",Font.PLAIN,14));
valueTextArea.setLineWrap(true);
valueTextArea.setWrapStyleWord(true);
valueScrollPane = new JScrollPane(valueTextArea);
valueScrollPane.createVerticalScrollBar();
valueScrollPane.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
valueScrollPane.getVerticalScrollBar().setUnitIncrement(20);
topPanel.add(valueScrollPane);
submitButton = new JButton();
submitButton.setPreferredSize(new Dimension(100,40));
submitButton.setText("Submit");
submitButton.setFont(new Font("Arial",Font.BOLD,20));
bottomPanel.add(submitButton);
submitButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
if(e.getSource()==submitButton) {
value = valueTextArea.getText();
name = nameTextArea.getText();
if (!value.equals("")) {
if (name.equals("")) {
name = "Untitled Clippy";
}
Database.addToDatabase(name,value);
UserInterface.mainFrame.removeAll();
addFrame.dispose();
UserInterface.jFrameRefresh();
} else {
}
}
}
});
addFrame.pack();
addFrame.addComponentListener(new ComponentAdapter() {
public void componentResized(ComponentEvent e) {
nameTextArea.setPreferredSize(new Dimension(addFrame.getWidth()-50,40));
valueScrollPane.setPreferredSize(new Dimension(addFrame.getWidth()-50,topPanel.getHeight()-nameTextArea.getHeight()-20));
addFrame.repaint();
}
});
} else if (UserInterface.pasteBool == true) {
value = UserInterface.clipboardString;
name = "Untitled Clippy";
Database.addToDatabase(name,value);
UserInterface.mainFrame.removeAll();
UserInterface.jFrameRefresh();
}
}
}
Any help would be greatly appreciated.
I have a system.out.println() function which will run, so I know that it that line does run. However, whenever it does, it doesn't seem to change the screen. I've tried using validate, and some other weird SwingUtilites methods. Nothing seems to work.
Any help would be greatly apprciated!