Kann in JTextField nichts reinschreiben

mrno

Erfahrenes Mitglied
Hi,
ich habe folgenden Code:
Code:
JWindow connectWindow;
JLabel closeConWindow;
public void init(){
      connectWindow = new JWindow();
      connectWindow.setSize(640,480);
connectWindow.setLocation((screen.width-connectWindow.getWidth())/2,(screen.height-connectWindow.getHeight())/2);
      connectWindow.setAlwaysOnTop(true);
      connectWindow.setLayout(null);
      connectWindow.getContentPane().setBackground(Color.gray);
      
      closeConWindow = new JLabel();
      closeConWindow.setText("X");
      closeConWindow.setBounds(new Rectangle(connectWindow.getWidth()-20,0,20,20));
      closeConWindow.addMouseListener(this);
      
      JLabel urlLb=new JLabel();
      urlLb.setText("host or Url:");
      urlLb.setBounds(new Rectangle(30,70,70,20));
      
      urlTf = new JTextField();
      urlTf.setBounds(new Rectangle(101,70,300,30));
      urlTf.setText("lol");
      
      connectWindow.add(closeConWindow,null);
      connectWindow.add(urlLb,null);
      connectWindow.add(urlTf,null);
      
      
      connectWindow.setVisible(true);
}
Mein Problem ist das ich in das TextFeld urlTf nichts reinschreiben kann. Was hab ich falsch gemacht
Wenn ich das JWindow durch ein JFrame ersetze funktioniert es. Brauche aber unbeding ein JWindow. Wer kann mir da helfen? Was macht ich falsch.

Thx für eure Mühen.
 
Ist ne gute Frage... ich weiß auch nicht warum dass so ist... werd mal ein bissel rumprobieren.. Nimm doch solange das:

Code:
JFrame connectWindow;
JLabel closeConWindow;
public void init() {
	connectWindow = new JFrame();
	connectWindow.setUndecorated( true ); //Titelleiste entfernen <---------------------------
	connectWindow.setSize( 640, 480 );
	connectWindow.setLocation( 0, 0 );
	connectWindow.setAlwaysOnTop(true);
	connectWindow.setLayout( null );
	connectWindow.getContentPane().setBackground( Color.gray );
	closeConWindow = new JLabel();
	closeConWindow.setText( "X" );
	closeConWindow.setBounds( new Rectangle( connectWindow.getWidth() - 20, 0,
											 20, 20 ) );
	closeConWindow.addMouseListener( this );
	JLabel urlLb = new JLabel();
	urlLb.setText( "host or Url:" );
	urlLb.setBounds( new Rectangle( 30, 70, 70, 20 ) );
	JTextField urlTf = new JTextField();
	urlTf.setBounds( new Rectangle( 101, 70, 300, 30 ) );
	urlTf.setText( "lol" );
	connectWindow.add( closeConWindow, null );
	connectWindow.add( urlLb, null );
	connectWindow.add( urlTf, null );
	connectWindow.setVisible( true );
}

Denke mal es geht dir um die Titelleiste?
 
Zuletzt bearbeitet:
Also hab jetzt das Problem gefunden.. Du solltest am Besten die Lösung aus meinem voherigen Beitrag nehmen, aber wenn du unbedingt ein JWindow willst mach folgendes:

Code:
  JWindow connectWindow;
JLabel closeConWindow;
  public void init() {
 
	Frame f = new Frame();
	f.setVisible(true);
	f.setSize(0,0);
	f.setLocation(-100,-100);
	
	connectWindow = new JWindow( f );
 
	//DER REST HIER HIN
	//.
	//.
	//.
  }
 
Das einzige Problem bei einem Frame ist das es in der Leiste im Betriebsystem als Programm angezeigt wird. Diese ist bei einem JWindow nicht der Fall. Gibt es nicht eine möglichkeit ohne Frame auszukommen.
 
IN der JavaDoc steht folgendes:

"For a Window which is not a Frame or Dialog to be focusable, its focusable Window state must be set to true, its nearest owning Frame or Dialog must be showing on the screen, and it must contain at least one Component in its focus traversal cycle. If any of these conditions is not met, then neither this Window nor any of its subcomponents can become the focus owner."

Ich vermute deshalb das es nicht anders geht.. Aber ich kann mal gucken ob ich den JFrame aus der Taskleiste rauskrieg..
 
das wäre auch eine gute lösung hoffe du findest eine möglichkeit. Mein Programm besteht aus ein Startmenü wie bei windows. und da sieht es blöd aus wenn es als programm angezeigt würde
 
So mal wieder was von mir. Erst mal sorry das das solange gedauert hat aber ich hatte wenig Zeit... Ich hab jetzt ne Lösung, wenn es dich nicht stört das du ne ca. 20kb große dll-Datei zu deinem Programm zupacken musst. Hier mal die Lösung (Auch als Anhang):

HideTaskBar.java:
Code:
/**
 * <p>Überschrift: </p>
 *
 * <p>Beschreibung: </p>
 *
 * <p>Copyright: Copyright (c) 2005</p>
 *
 * <p>Organisation: None</p>
 *
 * @author Tobias Viehweger
 * @version 1.0
 */
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class HideTaskBar
{
 //Das folgende ist wichtig (Dll einbinden und Funktion deklarieren):
  //------------------------------------------------------------------
  static
  {
	System.loadLibrary( "hidetaskbar" );
  }
 public native void hideTaskbar (Window w);
  //------------------------------------------------------------------
  JFrame connectWindow;
  JLabel closeConWindow;
 public void init() 
  {
	connectWindow = new JFrame();
	//Titelleiste entfernen------------
	connectWindow.setUndecorated(true);
	//---------------------------------
 
	connectWindow.setSize( 640, 480 );
	connectWindow.setLocation( 0, 0 );
	connectWindow.getContentPane().setLayout( null );
	connectWindow.getContentPane().setBackground( Color.gray );
	connectWindow.setFocusable(true);
	JLabel urlLb = new JLabel();
	urlLb.setText( "host or Url:" );
	urlLb.setBounds( new Rectangle( 30, 70, 70, 20 ) );
	JTextField urlTf = new JTextField();
	urlTf.setBounds( new Rectangle( 101, 70, 300, 30 ) );
	urlTf.setText( "lol" );
	urlTf.setEnabled(true);
	urlTf.setEditable(true);
	urlTf.setFocusable(true);
	connectWindow.getContentPane().add( urlLb, null );
	connectWindow.getContentPane().add( urlTf, null );
	connectWindow.setVisible(true);
	
	//Nativer Aufruf (Darf erst nach sichtbar machen aufgerufen werden)
	/*Sonst wird ein Fehler in der DLL ausgeloest (So oder so ähnlich)
	 #
 # An unexpected error has been detected by HotSpot Virtual Machine:
 #
 #  EXCEPTION_ACCESS_VIOLATION (0xc0000005) at pc=0x02ee1094, pid=3348, tid=1244
 #
 # Java VM: Java HotSpot(TM) Client VM (1.5.0_04-b05 mixed mode, sharing)
 # Problematic frame:
 # C  
 #
 # An error report file with more information is saved as hs_err_pid3348.log
 # 
 # If you would like to submit a bug report, please visit:
 #   http://java.sun.com/webapps/bugreport/crash.jsp
 #
	 */ 
	hideTaskbar(connectWindow);
  }
  public static void main( String[] args ) 
  {
	new HideTaskBar().init();
  }
}

HideTaskBar.cpp
Code:
// hidetaskbar.cpp : Definiert den Einsprungpunkt für die DLL-Anwendung.
//
#include "stdafx.h"
#include "HideTaskBar.h"
#include "jawt_md.H"
#include <objbase.h>
#include <oleauto.h>
#include <olectl.h>
#include <ocidl.h>
#include <shlobj.h>
DECLARE_INTERFACE_(ITaskbarList,IUnknown)
{
 STDMETHOD(QueryInterface)(THIS_ REFIID riid,LPVOID* ppvObj) PURE;
 STDMETHOD_(ULONG,AddRef)(THIS) PURE;
 STDMETHOD_(ULONG,Release)(THIS) PURE;
 STDMETHOD(ActiveTab)(HWND) PURE;
 STDMETHOD(AddTab)(HWND) PURE;
 STDMETHOD(DeleteTab)(HWND) PURE;
 STDMETHOD(HrInit)(HWND) PURE;
};
typedef ITaskbarList *LPITaskbarList;
LPITaskbarList pTaskbar;
BOOL bInited = FALSE;
void hideTaskBar(HWND hWnd)
{
 if (!bInited)
 {
  //Com Dingens initialsieren
  CoInitialize(0);
  //Ein Objekt erzeugen
  CoCreateInstance(CLSID_TaskbarList,0, 
   CLSCTX_INPROC_SERVER,IID_ITaskbarList,(void**)&pTaskbar);
  //Noch was initialisieren ;)
  pTaskbar->HrInit(NULL);
  bInited = TRUE;
 }
 pTaskbar->DeleteTab(hWnd);
}
HWND getHWnd (jobject window, JNIEnv * env)
{
 JAWT awt;
	 JAWT_DrawingSurface* ds;
 JAWT_DrawingSurfaceInfo* dsi;
 JAWT_Win32DrawingSurfaceInfo* dsi_win;
 //Initalisieren
 awt.version = JAWT_VERSION_1_3;
 JAWT_GetAWT(env, &awt);
	 ds = awt.GetDrawingSurface(env, window);
  ds->Lock(ds);
  dsi = ds->GetDrawingSurfaceInfo(ds);
  dsi_win = (JAWT_Win32DrawingSurfaceInfo*)dsi->platformInfo;
 
 //Handle speichern
	 HWND tmp = dsi_win->hwnd;
 //Aufraeumen
	 ds->FreeDrawingSurfaceInfo(dsi);
	 ds->Unlock(ds);
	 awt.FreeDrawingSurface(ds);
 return tmp;
}
JNIEXPORT void JNICALL Java_HideTaskBar_hideTaskbar
  (JNIEnv * env, jobject clazz, jobject window)
{
 HWND hWnd = getHWnd(window, env);
 hideTaskBar(hWnd);
 return;
}

HideTaskBar.h
Code:
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class HideTaskBar */
#ifndef _Included_HideTaskBar
#define _Included_HideTaskBar
#ifdef __cplusplus
extern "C" {
#endif
/*
 * Class:	 HideTaskBar
 * Method:	hideTaskbar
 * Signature: (Ljava/awt/Window;)V
 */
JNIEXPORT void JNICALL Java_HideTaskBar_hideTaskbar
  (JNIEnv *, jobject, jobject);
#ifdef __cplusplus
}
#endif
#endif

Hoffe mal das hilft dir weiter..
Im Anhang haste auch die Dll schon kompiliert.
 

Anhänge

Zurück