Swing Fenster-Probleme

Landei

Top Contributor
Folgende Fenster-Probleme:

1) Mein Java-Programm "J" wird über einen Butten in einem anderen Programm "P" gestartet. P lässt keinen Zugriff auf den Desktop oder die Task-Leiste zu. Nachdem J etwas berechnet hat, muss Ergebnis das in P eingetragen werden. Unsere Konfigurationsmöglichkeiten von P sind sehr eingeschränkt.

Das Problem ist, dass viele Nutzer das Programm entweder minimieren oder einfach daneben klicken (so dass es den Fokus verliert). Da man "dank" P nicht sieht, ob J offen ist, wird J dann solange neu gestartet, bis der Rechner in die Knie geht.

Ich sehe zwei Lösungsansätze:
1 a) J ist nicht minimierbar und bleibt immer "on top" sichtbar, auch wenn es den Fokus verliert. Auf die Schnelle wüsste ich nicht, wie ich das relisieren sollte.
1 b) Beim Minimieren oder Fokusverlust wird J einfach automatisch geschlossen. Der Fall "Minimieren" ist einfach, aber wie bekomme ich mit, wenn zu einer anderen Anwendung gewechselt wird?

2) Eine Tatstatur steht nur mit Aufwand zur Verfügung, die Bedienung sollte im Normalfall nur mit der Maus erfolgen. Das Ergebnis von J stelle ich schon ins Clipbord. Idealerweise würde jetzt ein Nutzer in das entsprechende Feld von "P" klicken und aus dem Clipbord kopieren. Mangels Tastatur böte sich an, die (sowieso nicht genutzte) mittlere Maustaste mit "kopieren" zu belegen. Kennt ihr ein Programm, mit dem man das möglichst einfach bewerkstelligen kann?

Ich weiß, mit etwas Recherche finde ich das alles früher oder später selber raus, aber es drängelt etwas und ich vermute mal, dass hier schon jemand ähnliche Probleme hatte.
 

ymene

Bekanntes Mitglied
Ich bin zufällig vor kurzem einmal über einen Artikel gestolpert, der beschrieben hat, wie man es umgehen kann, dass eine Anwendung mehrmals gestartet wird und man mit der einen Instanz daraufhin kommunizieren kann (so könnte man ihr vielleicht beim erneuten Start sagen, dass die alte Anwendung wieder in den Vordergrund kommen soll). Jedoch habe ich es in der Praxis bisher nie getestet, daher weiß ich nicht genau, ob es dir weiter hilft:

Java Blog Buch

Der Anfang schreckt zunächst ein bisschen ab, aber da werden zunächst verschiedene Ansätze diskutiert.

Falls dies zu umständlich, hier ein paar Ideen zu deiner Lösung 1a:

Um zu verhindern, dass eine Anwendung minimiert wird, könntest du einfach statt einem JFrame ein JWindow nutzen. Dieses hat auch die Eigenschaft setAlwaysOnTop( true ), so dürfte es nicht so einfach in den Hintergrund geraten, außer du hast noch eine weitere Anwendung offen, die die gleiche Funktionalität hat. Müsstest dann noch zusätzlich ein Menü oder ähnliches einbauen, um die Möglichkeit zu geben, die Anwendung zu beenden.

Zum zweiten Punkt fällt mir spontan auch keine Lösung ein, wenn eine Kommunikation zwischen beiden Programmen nicht möglich ist.

Grüße,
ymene
 

hansmueller

Bekanntes Mitglied
Hallo,

Vielleicht hilft dir das weiter:

Es gibt für das JFrame die Methoden .getExtendedState() und .setExtendedState().

Mit denen kann man den Zustand des Fensters abfragen und setzen.
Man müßte halt noch den Listener, der sich um das Minimieren kümmert entsprechend bearbeiten.

MfG
hansmueller
 

Landei

Top Contributor
JWindow mit setAlwaysOnTop scheint eine gute Lösung zu sein. Ausschalter dran und draggable machen, dann sollte es gehen.

Kennt noch jemand ein Tool, mit dem man [Ctrl]+V oder so auf eine Maustaste legen kann?
 

Landei

Top Contributor
Hmmm, Schließen und Verschieben geht, dafür nimmt mein Programm keine Tastendrücke mehr an, z.B. in tagField.

Irgendwelche Ideen?

Java:
public class PSCG implements ClipboardOwner {

  private final JWindow frame = new JWindow();
  private final JTabbedPane tabbedPane = new JTabbedPane();
  private final JTextField tagField = new JTextField(20);
  private final JTextField codeField = new JTextField(20);
  private final JLabel substrateLabel = new JLabel("");
  private final JLabel dimensionLabel = new JLabel("");
  private final Map<String, Integer> substrates = new HashMap<String, Integer>();
  private final Map<String, Integer> dimensions = new HashMap<String, Integer>();
  private Selector substrateSelector;
  private Selector dimensionSelector;

  private final Action calculateAction = new AbstractAction("Calculate Code") {
    public void actionPerformed(ActionEvent ae) {
      calculate();
    }
  };

  public static void main(String... args) {
    new PSCG();
  }

  private PSCG() {
    load("substrate.csv", substrates);
    load("dimension.csv", dimensions);
    initFrame();
  }

  private void load(String fileName, Map<String, Integer> map) {
    //unwichtig
  }

  private void criticalError(Exception ex) {
    JTextArea area = new JTextArea(ex.getClass().getName() + "\n" +
        Arrays.toString(ex.getStackTrace()), 5, 40);
    area.setLineWrap(true);
    JOptionPane.showMessageDialog(null, new JScrollPane(area), "Critical Error", JOptionPane.ERROR_MESSAGE);
    System.exit(1);
  }

  private void initFrame() {
    frame.setSize(300, 200);
    frame.setLocation(100, 100);
    //frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setAlwaysOnTop(true);
    tabbedPane.addTab("Tag", getTagPane());
    tabbedPane.addTab("Manual", getManualPane());
    frame.getContentPane().add(tabbedPane);

    Box north = Box.createHorizontalBox();
    frame.getContentPane().setBackground(new Color(200, 200, 255));
    north.setBorder(BorderFactory.createLineBorder(Color.BLACK, 2));
    north.add(new JLabel("  Powerscan Code Generator"));
    north.add(Box.createHorizontalGlue());
    JButton exitButton = new JButton("X");
    exitButton.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
          frame.dispose();
        }
      });
    north.add(exitButton);
    frame.getContentPane().add(north, BorderLayout.NORTH);

    JPanel south = new JPanel(new FlowLayout(FlowLayout.CENTER));
    codeField.setEditable(false);
    south.add(codeField);
    south.add(new JButton(calculateAction));
    frame.getContentPane().add(south, BorderLayout.SOUTH);
    frame.pack();
    frame.setVisible(true);
    tagField.requestFocus();

    frame.addMouseMotionListener(new MouseMotionListener() {
        private Point from = new Point();

        public void mouseDragged(MouseEvent e) {
          frame.setLocation(frame.getX() + e.getX() - from.x, frame.getY() + e.getY() - from.y);
        }

        public void mouseMoved(MouseEvent e) {
          from = e.getPoint();
        }
      });
  }

  private JComponent getTagPane() {
    Box content = Box.createVerticalBox();
    content.add(new JLabel("Tag Number"));
    content.add(tagField);
    content.add(substrateLabel);
    content.add(dimensionLabel);
    JPanel pane = new JPanel();
    pane.add(content);
    return pane;
  }

  private JComponent getManualPane() {
    Box content = Box.createHorizontalBox();
    substrateSelector = new Selector(getSubstrates(), 4);
    content.add(substrateSelector);
    dimensionSelector = new Selector(getDimensions(), 4);
    content.add(dimensionSelector);
    JPanel pane = new JPanel();
    pane.add(content);
    return pane;
  }

  private String[] getSubstrates() {
    return substrates.keySet().toArray(new String[] { });
  }

  private String[] getDimensions() {
    return dimensions.keySet().toArray(new String[] { });
  }

  private void calculate() {
     //unwichtig
  }

  private void setClipBoard(String s) {
    Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();
    StringSelection stringSelection = new StringSelection(s);
    clipboard.setContents(stringSelection, this);
  }

  public void lostOwnership(Clipboard clipboard, Transferable contents) {
  }

}
 

ymene

Bekanntes Mitglied
Habe hier gerade ne Schelle bekommen, dass ich es gewagt habe nen JWindow vorzuschlagen. Da gibt es wohl ständig das Problem mit den KeyListenern. Als Alternative nimm einfach wieder einen JFrame und setz ihn auf

Java:
setUndecorated( true );

Ansonsten kannst alles so lassen und die KeyEvents müssten wieder funktionieren.

Grüße,
ymene
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
A Probleme mit einem Kind-Fenster AWT, Swing, JavaFX & SWT 7
R Fenster Repaint Probleme AWT, Swing, JavaFX & SWT 7
M suche geeignetes Fenster zur Anzeige AWT, Swing, JavaFX & SWT 49
berserkerdq2 Kann ich ein Rechteck mittig im Fenster halten, egal wie ich die Bildschirmgröße verändere? AWT, Swing, JavaFX & SWT 3
W 2 JTables in einem Swing-Fenster? AWT, Swing, JavaFX & SWT 5
berserkerdq2 Wie füge ich ein Bild in javafx mit dem Scenebuilder ein, das automatisch mitgezogen wird, wenn das Fenster vergrößert wird oder Vollbildmodus AWT, Swing, JavaFX & SWT 6
TheSepp Fenster um x Pixel bewegen, wenn man auf dem Knopf drückt AWT, Swing, JavaFX & SWT 10
J JavaFx PDF in einem Element in einem Fenster anzeigen. AWT, Swing, JavaFX & SWT 11
K JavaFX unterschiedliche (mehrere Fenster) in seperater Main Methode AWT, Swing, JavaFX & SWT 26
G Kann man ein 2. JavaFX-Fenster auch beenden (exit) statt schließen (close) lassen? AWT, Swing, JavaFX & SWT 8
L Swing Files abspeichern mit Save as Dialog Fenster AWT, Swing, JavaFX & SWT 5
OZAN86 einfaches Fenster öffnen scheitert AWT, Swing, JavaFX & SWT 18
G Zuletzt aktives Fenster, vor dem aktuell aktiven AWT, Swing, JavaFX & SWT 2
sserio Kann man bei JavaFx ein Fenster aufkommen lassen? AWT, Swing, JavaFX & SWT 1
Z GUI Forms - Mehrere Fenster in einem Projekt AWT, Swing, JavaFX & SWT 18
S Swing Alles beenden bei Fenster mit Scroll-Balken AWT, Swing, JavaFX & SWT 6
CptK windowClosed() nur aufrufen, wenn Fenster nicht über Button geschlossen wird AWT, Swing, JavaFX & SWT 1
W Zweites/neues Fenster durch Button öffnen AWT, Swing, JavaFX & SWT 6
CptK Fokus auf geöffnetes Zweit-Fenster setzen und Eingaben außerhalb blocken AWT, Swing, JavaFX & SWT 2
B Text mit Absatz + OK-Button, der Fenster wieder schließt AWT, Swing, JavaFX & SWT 7
MiMa JavaFX Fenster in JavaFX öffnen Schliessen (Initialisierung) AWT, Swing, JavaFX & SWT 20
N Kontextmenü (Popup-Fenster) erstellen AWT, Swing, JavaFX & SWT 3
L Hintergrundbild im Fenster darstellen AWT, Swing, JavaFX & SWT 9
P JavaFX Fenster wird nicht angezeigt (Mac) AWT, Swing, JavaFX & SWT 13
VPChief Buttons Reagieren erst wenn ich Fenster minimiere AWT, Swing, JavaFX & SWT 4
B JavaFX TextField Eingabe in neues Fenster übernehmen AWT, Swing, JavaFX & SWT 4
N Drag and Drop Fenster AWT, Swing, JavaFX & SWT 11
A Swing JTextField an Button übergeben für Popup-Fenster funktioniert nicht AWT, Swing, JavaFX & SWT 3
P JavaFX Zugriff auf Fenster/Layout-Container in eigenen Klassen AWT, Swing, JavaFX & SWT 5
Bluedaishi JavaFX Programm start mit zwei scenen bzw Fenster AWT, Swing, JavaFX & SWT 1
J Fenster mit Inhalten aus einem Array Füllen AWT, Swing, JavaFX & SWT 4
S Swing Fenster State Machine AWT, Swing, JavaFX & SWT 1
A Fenster genau unterhalb von JTextField anzeigen AWT, Swing, JavaFX & SWT 1
J Overlay Panel statt neues Fenster AWT, Swing, JavaFX & SWT 6
S Swing Bei start des Programmes kein Fenster zu sehen AWT, Swing, JavaFX & SWT 1
X Neues Fenster mit Button öffnen und bearbeiten AWT, Swing, JavaFX & SWT 4
platofan23 JAVAFX zweites Fenster öffnen AWT, Swing, JavaFX & SWT 2
M JavaFX Altes Fenster (FXML Datei) löschen AWT, Swing, JavaFX & SWT 16
P JavaFX Fenster lädt nicht mehr AWT, Swing, JavaFX & SWT 4
I AWT Listener während man in anderem Fenster ist AWT, Swing, JavaFX & SWT 4
S JavaFX Fenster aufkommen lassen, wenn mit der Maus über bestimmten Bereich fahren AWT, Swing, JavaFX & SWT 1
L Java- UI zweites Fenster aus einer anderen Klasse öffnen durch ButtonClick AWT, Swing, JavaFX & SWT 4
D Swing Neues (3.) Fenster öffnen AWT, Swing, JavaFX & SWT 2
G JavaFX Fenster 1 Array übertragen zur Fenster 2 AWT, Swing, JavaFX & SWT 0
I JavaFX Fenster wird auf einem anderen Rechner anders dargestellt AWT, Swing, JavaFX & SWT 5
K Fenster welches den Sieger anzeigt AWT, Swing, JavaFX & SWT 5
O JavaFX Fenster scließen AWT, Swing, JavaFX & SWT 4
A Swing Fenster ändert Position bei Mausklick nicht AWT, Swing, JavaFX & SWT 2
S SWT neues Fenster, buttons aus alten etc... AWT, Swing, JavaFX & SWT 0
D Java FXML mehrere Fenster AWT, Swing, JavaFX & SWT 4
L Input aus Sub-Fenster Startfenster übergeben AWT, Swing, JavaFX & SWT 5
B AWT Fenster schließt nicht AWT, Swing, JavaFX & SWT 2
H JavaFX Kriege fehler beim Fenster wechseln AWT, Swing, JavaFX & SWT 7
G Swing Wenn ich mein JFrame Fenster vergrößere die Inhalte anpassen AWT, Swing, JavaFX & SWT 1
U Swing Inhalt vom Fenster wird erst durch Hovern oder Klicken sichtbar AWT, Swing, JavaFX & SWT 3
A Nach klick auf Button neuen Inhalt im gleichen Fenster AWT, Swing, JavaFX & SWT 3
T Fenster schließen AWT, Swing, JavaFX & SWT 4
K JavaFX ObservableList + Fenster AWT, Swing, JavaFX & SWT 6
windl Transparentes / halbtransparentes Fenster AWT, Swing, JavaFX & SWT 1
K Fenster mittig im Vollbildschirm - ok, aber ... AWT, Swing, JavaFX & SWT 2
N Swing Sorry nicht mal ein Fenster öffnen... AWT, Swing, JavaFX & SWT 19
S actionlistener mit 2 fenster integrieren AWT, Swing, JavaFX & SWT 11
G Event Handling TableView daten in ein neues Fenster herauslesen? AWT, Swing, JavaFX & SWT 3
C Benutzername in GUI eingeben und nach Spiel neues Fenster Benutzername wieder anzeigen AWT, Swing, JavaFX & SWT 1
C Durch klicken von Button neues Fenster oeffnen AWT, Swing, JavaFX & SWT 18
D JavaFX (WebStart) Graues Fenster beim Start AWT, Swing, JavaFX & SWT 4
J Button vergrößert sich bei Fenster resize AWT, Swing, JavaFX & SWT 22
L Zweites Fenster mit Thread AWT, Swing, JavaFX & SWT 0
Paul15 Zwei Fenster AWT, Swing, JavaFX & SWT 23
T LayoutManager Methode, um Bildschirm(fenster) für Aktualisierungen zu blockieren bzw. freizugeben gesucht AWT, Swing, JavaFX & SWT 2
C AWT Problem mit Protokol Fenster AWT, Swing, JavaFX & SWT 0
L Daten in neuem Fenster AWT, Swing, JavaFX & SWT 2
D Mit Klick auf Button ein neues Fenster erzeugen AWT, Swing, JavaFX & SWT 11
I JTable: Doppelklick auf Table soll neues Fenster öffnen und Daten aus JTable anzeigen AWT, Swing, JavaFX & SWT 4
A Swing Textübergabe innerhalb der Anwendung in unterschiedlichen Fenster AWT, Swing, JavaFX & SWT 8
wolfgang63 JavaFX Animation, Kreise im vorgegebem Takt durchs Fenster laufen lassen AWT, Swing, JavaFX & SWT 3
K Java Button öffnet neues Fenster AWT, Swing, JavaFX & SWT 5
Z Fenster leer, wenn ich ein JTextField erzeuge AWT, Swing, JavaFX & SWT 3
W Swing JScrollPane für mein Fenster AWT, Swing, JavaFX & SWT 4
X Swing 2 Fenster (1 im Vordergrund) AWT, Swing, JavaFX & SWT 6
X Swing Ein neues Fenster öffen aber ohne ein extra Prozess zu starten AWT, Swing, JavaFX & SWT 1
T JavaFX ControlsFX-Notification öffnet nicht wenn kein JavaFX-Fenster offen. AWT, Swing, JavaFX & SWT 1
E JavaFX JavaFX Fenster nicht schließen AWT, Swing, JavaFX & SWT 4
K JavaFX Fenster aufrufen über Menü AWT, Swing, JavaFX & SWT 1
thet1983 offne Fenster gemeinsam schließen AWT, Swing, JavaFX & SWT 8
H AWT Fenster- und JLabel-Größe automatisch anpassen AWT, Swing, JavaFX & SWT 2
Z JSlider im Modalen-Fenster AWT, Swing, JavaFX & SWT 0
Tort-E JavaFX Fenster nachladen AWT, Swing, JavaFX & SWT 1
V Fenster in einem Fenster anordnen AWT, Swing, JavaFX & SWT 7
I Zwei Fenster nebeneinander anzeigen AWT, Swing, JavaFX & SWT 2
U Fenster beim Vergörßern immer quadratsich AWT, Swing, JavaFX & SWT 7
Q Swing Fenster updaten - Hinzugefügte Komponenten darstellen AWT, Swing, JavaFX & SWT 3
E Alles in einem Fenster AWT, Swing, JavaFX & SWT 5
A Fenster erstellen AWT, Swing, JavaFX & SWT 2
I Swing Beim Fenster das kleine Symbol(ICS) ändern AWT, Swing, JavaFX & SWT 3
K JavaFX Vorschau Bereich/Fenster einer bestehenden Group AWT, Swing, JavaFX & SWT 3
G Scrollbar für das Fenster einfügen AWT, Swing, JavaFX & SWT 3
X Fenster von außen ansprechen AWT, Swing, JavaFX & SWT 7
brunothg Swing JTable -> AUTO_RESIZE_OFF aber das Fenster ausfüllen AWT, Swing, JavaFX & SWT 0
G jLabel aus anderem Fenster ändern AWT, Swing, JavaFX & SWT 7

Ähnliche Java Themen

Neue Themen


Oben