basic functionality
This commit is contained in:
parent
cddc4951d4
commit
45af8e7904
12
.classpath
Normal file
12
.classpath
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<classpath>
|
||||||
|
<classpathentry kind="src" output="bin/main" path="src/main/java">
|
||||||
|
<attributes>
|
||||||
|
<attribute name="gradle_scope" value="main"/>
|
||||||
|
<attribute name="gradle_used_by_scope" value="main,test"/>
|
||||||
|
</attributes>
|
||||||
|
</classpathentry>
|
||||||
|
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-17/"/>
|
||||||
|
<classpathentry kind="con" path="org.eclipse.buildship.core.gradleclasspathcontainer"/>
|
||||||
|
<classpathentry kind="output" path="bin/default"/>
|
||||||
|
</classpath>
|
2
.gitignore
vendored
Normal file
2
.gitignore
vendored
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
/.gradle/
|
||||||
|
/bin/
|
23
.project
Normal file
23
.project
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<projectDescription>
|
||||||
|
<name>ClickMyText</name>
|
||||||
|
<comment></comment>
|
||||||
|
<projects>
|
||||||
|
</projects>
|
||||||
|
<buildSpec>
|
||||||
|
<buildCommand>
|
||||||
|
<name>org.eclipse.jdt.core.javabuilder</name>
|
||||||
|
<arguments>
|
||||||
|
</arguments>
|
||||||
|
</buildCommand>
|
||||||
|
<buildCommand>
|
||||||
|
<name>org.eclipse.buildship.core.gradleprojectbuilder</name>
|
||||||
|
<arguments>
|
||||||
|
</arguments>
|
||||||
|
</buildCommand>
|
||||||
|
</buildSpec>
|
||||||
|
<natures>
|
||||||
|
<nature>org.eclipse.jdt.core.javanature</nature>
|
||||||
|
<nature>org.eclipse.buildship.core.gradleprojectnature</nature>
|
||||||
|
</natures>
|
||||||
|
</projectDescription>
|
13
.settings/org.eclipse.buildship.core.prefs
Normal file
13
.settings/org.eclipse.buildship.core.prefs
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
arguments=
|
||||||
|
auto.sync=false
|
||||||
|
build.scans.enabled=false
|
||||||
|
connection.gradle.distribution=GRADLE_DISTRIBUTION(WRAPPER)
|
||||||
|
connection.project.dir=
|
||||||
|
eclipse.preferences.version=1
|
||||||
|
gradle.user.home=
|
||||||
|
java.home=
|
||||||
|
jvm.arguments=
|
||||||
|
offline.mode=false
|
||||||
|
override.workspace.settings=false
|
||||||
|
show.console.view=false
|
||||||
|
show.executions.view=false
|
2
.settings/org.eclipse.core.resources.prefs
Normal file
2
.settings/org.eclipse.core.resources.prefs
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
eclipse.preferences.version=1
|
||||||
|
encoding/<project>=UTF-8
|
4
.settings/org.eclipse.jdt.core.prefs
Normal file
4
.settings/org.eclipse.jdt.core.prefs
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
eclipse.preferences.version=1
|
||||||
|
org.eclipse.jdt.core.compiler.codegen.targetPlatform=17
|
||||||
|
org.eclipse.jdt.core.compiler.compliance=17
|
||||||
|
org.eclipse.jdt.core.compiler.source=17
|
39
build.gradle
Normal file
39
build.gradle
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
plugins {
|
||||||
|
id 'java'
|
||||||
|
id 'eclipse'
|
||||||
|
id 'application'
|
||||||
|
}
|
||||||
|
|
||||||
|
group 'de.jottyfan.guitools'
|
||||||
|
version '0.0.1'
|
||||||
|
|
||||||
|
repositories {
|
||||||
|
mavenCentral()
|
||||||
|
}
|
||||||
|
|
||||||
|
dependencies {
|
||||||
|
implementation 'org.swinglabs.swingx:swingx-core:1.6.5-1'
|
||||||
|
implementation 'org.apache.commons:commons-lang3:3.12.0'
|
||||||
|
testImplementation 'org.junit.jupiter:junit-jupiter:5.9.0'
|
||||||
|
}
|
||||||
|
|
||||||
|
application {
|
||||||
|
mainClass = 'Main'
|
||||||
|
}
|
||||||
|
|
||||||
|
test {
|
||||||
|
useJUnitPlatform()
|
||||||
|
}
|
||||||
|
|
||||||
|
jar {
|
||||||
|
manifest {
|
||||||
|
attributes (
|
||||||
|
'Main-Class': 'Main',
|
||||||
|
'Implementation-Version': version
|
||||||
|
)
|
||||||
|
}
|
||||||
|
archiveBaseName = project.name
|
||||||
|
from {
|
||||||
|
configurations.runtimeClasspath.collect { it.isDirectory() ? it : zipTree(it) }
|
||||||
|
}
|
||||||
|
}
|
239
src/main/java/de/jottyfan/guitools/Gui.java
Normal file
239
src/main/java/de/jottyfan/guitools/Gui.java
Normal file
@ -0,0 +1,239 @@
|
|||||||
|
package de.jottyfan.guitools;
|
||||||
|
|
||||||
|
import java.awt.BorderLayout;
|
||||||
|
import java.awt.Dimension;
|
||||||
|
import java.awt.FlowLayout;
|
||||||
|
import java.awt.GridLayout;
|
||||||
|
import java.awt.HeadlessException;
|
||||||
|
import java.awt.Toolkit;
|
||||||
|
import java.awt.datatransfer.Clipboard;
|
||||||
|
import java.awt.datatransfer.DataFlavor;
|
||||||
|
import java.awt.datatransfer.StringSelection;
|
||||||
|
import java.awt.datatransfer.UnsupportedFlavorException;
|
||||||
|
import java.awt.event.MouseAdapter;
|
||||||
|
import java.awt.event.MouseEvent;
|
||||||
|
import java.io.BufferedReader;
|
||||||
|
import java.io.FileReader;
|
||||||
|
import java.io.FileWriter;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.HashSet;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
|
import javax.swing.BorderFactory;
|
||||||
|
import javax.swing.JButton;
|
||||||
|
import javax.swing.JFileChooser;
|
||||||
|
import javax.swing.JFrame;
|
||||||
|
import javax.swing.JPanel;
|
||||||
|
import javax.swing.JScrollPane;
|
||||||
|
import javax.swing.JTextArea;
|
||||||
|
import javax.swing.JTextField;
|
||||||
|
import javax.swing.SwingUtilities;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @author jotty
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public class Gui extends JFrame {
|
||||||
|
private static final long serialVersionUID = 1L;
|
||||||
|
|
||||||
|
private JTextArea clipboardContent;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* for the first call
|
||||||
|
*
|
||||||
|
* @param args the args; the first one might contain a file path
|
||||||
|
*/
|
||||||
|
public Gui(String[] args) {
|
||||||
|
Set<String> list = new HashSet<>();
|
||||||
|
if (args != null && args.length > 0) {
|
||||||
|
String filename = args[1];
|
||||||
|
try {
|
||||||
|
list.addAll(readFileLines(filename));
|
||||||
|
} catch (IOException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
setup(list);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* for the recreation after a new search term has been added
|
||||||
|
*
|
||||||
|
* @param list the list of search terms
|
||||||
|
*/
|
||||||
|
private Gui(Set<String> list) {
|
||||||
|
setup(list);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* reads the lines of the file; filename is expected to be a text file with one
|
||||||
|
* word a line
|
||||||
|
*
|
||||||
|
* @param filename the file name to the text file
|
||||||
|
* @return the list of search terms
|
||||||
|
* @throws IOException on file reading errors
|
||||||
|
*/
|
||||||
|
private List<String> readFileLines(String filename) throws IOException {
|
||||||
|
List<String> list = new ArrayList<>();
|
||||||
|
try (BufferedReader reader = new BufferedReader(new FileReader(filename))) {
|
||||||
|
String line;
|
||||||
|
while ((line = reader.readLine()) != null) {
|
||||||
|
if (!line.isBlank()) {
|
||||||
|
list.add(line);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return list;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* setup the window
|
||||||
|
*
|
||||||
|
* @param clickables the list of search terms
|
||||||
|
*/
|
||||||
|
public void setup(Set<String> clickables) {
|
||||||
|
this.getContentPane().removeAll();
|
||||||
|
|
||||||
|
Gui thisWindow = this;
|
||||||
|
|
||||||
|
setTitle("ClickMyText");
|
||||||
|
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
|
||||||
|
setSize(600, 400);
|
||||||
|
setLayout(new BorderLayout());
|
||||||
|
|
||||||
|
JPanel menubar = new JPanel();
|
||||||
|
menubar.setLayout(new FlowLayout());
|
||||||
|
|
||||||
|
JTextField textline = new JTextField();
|
||||||
|
textline.setSize(20, 20);
|
||||||
|
Dimension d = new Dimension(200, 25);
|
||||||
|
textline.setMinimumSize(d);
|
||||||
|
textline.setPreferredSize(d);
|
||||||
|
textline.setMaximumSize(d);
|
||||||
|
|
||||||
|
menubar.add(textline);
|
||||||
|
|
||||||
|
JButton plusBtn = new JButton("Add");
|
||||||
|
plusBtn.addMouseListener(new MouseAdapter() {
|
||||||
|
@Override
|
||||||
|
public void mouseClicked(MouseEvent e) {
|
||||||
|
clickables.add(textline.getText());
|
||||||
|
SwingUtilities.invokeLater(() -> {
|
||||||
|
dispose();
|
||||||
|
Gui gui = new Gui(clickables);
|
||||||
|
gui.setVisible(true);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
menubar.add(plusBtn);
|
||||||
|
|
||||||
|
JButton saveBtn = new JButton("Save");
|
||||||
|
saveBtn.addMouseListener(new MouseAdapter() {
|
||||||
|
@Override
|
||||||
|
public void mouseClicked(MouseEvent e) {
|
||||||
|
JFileChooser fileChooser = new JFileChooser();
|
||||||
|
int result = fileChooser.showSaveDialog(thisWindow);
|
||||||
|
if (result == JFileChooser.APPROVE_OPTION) {
|
||||||
|
String filename = fileChooser.getSelectedFile().getAbsolutePath();
|
||||||
|
try {
|
||||||
|
FileWriter writer = new FileWriter(filename);
|
||||||
|
for (String term : clickables) {
|
||||||
|
writer.write(term);
|
||||||
|
writer.write("\n");
|
||||||
|
}
|
||||||
|
writer.close();
|
||||||
|
} catch (IOException e1) {
|
||||||
|
e1.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
menubar.add(saveBtn);
|
||||||
|
|
||||||
|
JButton loadBtn = new JButton("Load");
|
||||||
|
loadBtn.addMouseListener(new MouseAdapter() {
|
||||||
|
@Override
|
||||||
|
public void mouseClicked(MouseEvent e) {
|
||||||
|
JFileChooser fileChooser = new JFileChooser();
|
||||||
|
int result = fileChooser.showOpenDialog(thisWindow);
|
||||||
|
if (result == JFileChooser.APPROVE_OPTION) {
|
||||||
|
String filename = fileChooser.getSelectedFile().getAbsolutePath();
|
||||||
|
SwingUtilities.invokeLater(() -> {
|
||||||
|
dispose();
|
||||||
|
Gui gui = new Gui(new String[] { null, filename });
|
||||||
|
gui.setVisible(true);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
menubar.add(loadBtn);
|
||||||
|
|
||||||
|
JButton exitBtn = new JButton("Exit");
|
||||||
|
exitBtn.addMouseListener(new MouseAdapter() {
|
||||||
|
@Override
|
||||||
|
public void mouseReleased(MouseEvent e) {
|
||||||
|
System.exit(0);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
menubar.add(exitBtn);
|
||||||
|
|
||||||
|
JPanel linksPanel = new JPanel();
|
||||||
|
linksPanel.setLayout(new GridLayout(6, 2, 2, 2));
|
||||||
|
|
||||||
|
for (String clickable : clickables) {
|
||||||
|
JButton btn = new JButton(clickable);
|
||||||
|
btn.addMouseListener(new MouseAdapter() {
|
||||||
|
public void mouseClicked(MouseEvent e) {
|
||||||
|
copyToClipboard(clickable);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
linksPanel.add(btn);
|
||||||
|
}
|
||||||
|
|
||||||
|
clipboardContent = new JTextArea(3, 30);
|
||||||
|
clipboardContent.setEditable(false);
|
||||||
|
clipboardContent.setBorder(BorderFactory.createTitledBorder("Clipboard content"));
|
||||||
|
copyFromClipboard();
|
||||||
|
|
||||||
|
JScrollPane scrollPane = new JScrollPane(clipboardContent);
|
||||||
|
add(menubar, BorderLayout.NORTH);
|
||||||
|
add(linksPanel, BorderLayout.CENTER);
|
||||||
|
add(scrollPane, BorderLayout.SOUTH);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* copy the clipboard content to the preview field
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
private void copyFromClipboard() {
|
||||||
|
Object content;
|
||||||
|
try {
|
||||||
|
content = Toolkit.getDefaultToolkit().getSystemClipboard().getData(DataFlavor.stringFlavor);
|
||||||
|
if (content != null) {
|
||||||
|
clipboardContent.setText(content.toString());
|
||||||
|
}
|
||||||
|
} catch (HeadlessException | IOException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
} catch (UnsupportedFlavorException e) {
|
||||||
|
// ignore; this might be only an empty clipboard
|
||||||
|
System.out.println("no clipboard content found");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* the text might be copied to the clipboard immediately
|
||||||
|
*
|
||||||
|
* @param text the text to copy
|
||||||
|
*/
|
||||||
|
private void copyToClipboard(String text) {
|
||||||
|
StringSelection selection = new StringSelection(text);
|
||||||
|
Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();
|
||||||
|
clipboard.setContents(selection, null); // update the clipboard from the selection
|
||||||
|
|
||||||
|
clipboardContent.setText(text); // update the preview from the clipboard
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
24
src/main/java/de/jottyfan/guitools/Main.java
Normal file
24
src/main/java/de/jottyfan/guitools/Main.java
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
package de.jottyfan.guitools;
|
||||||
|
|
||||||
|
import javax.swing.SwingUtilities;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @author jotty
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public class Main {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* start the application; if args is given, the first argument is a filename for
|
||||||
|
* a list of strings
|
||||||
|
*
|
||||||
|
* @param args the args
|
||||||
|
*/
|
||||||
|
public static void main(String[] args) {
|
||||||
|
SwingUtilities.invokeLater(() -> {
|
||||||
|
Gui gui = new Gui(args);
|
||||||
|
gui.setVisible(true);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user