Вот код перерисовки:
Код: Выделить всё
//Refreshes mainFrame
if (startUp == true) {
mainFrame.setVisible(true);
startUp = false;
} else {
System.out.println("repaint");
mainFrame.repaint();
}
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 sortBy = new JComboBox(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();
}
}
Код: Выделить всё
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();
}
}
}
Код: Выделить всё
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();
}
}
}
Подробнее здесь: https://stackoverflow.com/questions/769 ... em-to-work