Partage
  • Partager sur Facebook
  • Partager sur Twitter

Java Appplication

GUI

    23 novembre 2020 à 15:54:50

    Bonjour tout le monde,

    Je me permets ce petit sujet car cela fait un moment que je cherche mais que je n'arrive pas à comprendre.

    L'idée est assez simple, je suis entrain de développer une interface dite Homme-machine, qui à pour objectif d'afficher les données d'une base de données (MySQL). Un emplois du temps affichera des RDV stockés dans la base de données : j'utilise un JTable pour représenté l'emplois du temps.

    Mon problème c'est qu'il est impossible, du moins avec mon niveau en java, d'ajouter des headers pour chaque lignes (ce référer à la photo pour mieux comprendre), pour contrer ce problème, j'ai créé une JListe contenant les "pseudos headers" que j'ai ensuite coller à coter du JTable. Viennent maintenant les soucis : je n'arrive pas à mettre une échelle équivalente pour la JTable et la JListe, ainsi la liste d'header ne colle pas bien avec la table.

    Dans le même ordre d'idées, je souhaiterai réduire la taille de la Jtable au juste nécessaire; malheureusement j'ai encore du mal avec les méthodes permettant d'aligner, positionner les composants de la Frame.

    Pour expliquer l'image, les cases du tableaux contiennent actuellement de simple numéros qui seront plus tard remplacés par des données provenant de MySql. La Frame est paramétré pour avoir une taille équivalente à celle de l'écran utilisateur. 

    Bref, peut être que mon problème vient de ma façon d'utiliser les layouts?

    C'est peut être un peu flou donc n'hésitez pas à me demander d'être plus clair sur certains points.

    En vous remerciant par avance !

    Cedex

    import java.awt.BorderLayout;
    import java.awt.Dimension;
    import java.awt.Toolkit;
    import java.awt.event.MouseEvent;
    
    import javax.swing.Box;
    import javax.swing.JFrame;
    import javax.swing.JLabel;
    import javax.swing.JList;
    import javax.swing.JPanel;
    import javax.swing.JScrollPane;
    import javax.swing.JTable;
    
    public class TestTableau extends JFrame{
    
    	//Instantiations
    
    	JPanel display;
    	JPanel displayTime;
    	
    	JTable stockage;
    	JScrollPane sp;
    	
    	JList history;
    	JList docStorage;
    	JList time;
    	
    	JLabel user;
    	JLabel messageError;
    	
    	JFrame frame = new JFrame();
    	
    	
    	public void initialize()
    	{
    		
    		//examples
    		String[]historyExample = {"RDV 18/11/20","RDV 15/08/18"};
    		String[]docExample = {"Martin K.","Joseph M."};
    		Object[][]stockageExample = {
    				{"1","2","3","4","5"},
    				{"1","2","3","4","5"},
    				{"1","2","3","4","5"},
    				{"1","2","3","4","5"},
    				{"1","2","3","4","5"},
    				{"1","2","3","4","5"},
    				{"1","2","3","4","5"},
    				{"1","2","3","4","5"},
    				{"1","2","3","4","5"},
    				{"1","2","3","4","5"},
    				{"1","2","3","4","5"},
    				{"1","2","3","4","5"},
    				{"1","2","3","4","5"}};
    		Object[]headerExample = {"Monday","Tuesday","Wednesday","Thursday","Friday"};
    		String[]hoursTime = {"Time","8h00","9h00","10h00","11h00","12h00","13h00","14h00","15h00","16h00","17h00","18h00","19h00"};
    
    		//Initilizations
    		history = new JList(historyExample);
    		docStorage = new JList(docExample);
    		time = new JList(hoursTime);
    		user = new JLabel("Informations of the user. Example Name + MatriculNumber");
    		messageError = new JLabel("Message Logs : ");
    		stockage = new JTable(stockageExample,headerExample);
    		stockage.setRowHeight(40);
    		sp = new JScrollPane(stockage);
    		time.setSize(5, 10);;
    
    		//Display Intialization & Components
    		display = new JPanel(new BorderLayout(100,100));
    		displayTime = new JPanel(new BorderLayout(0,0));
    
    		displayTime.add(sp,BorderLayout.CENTER);
    		displayTime.add(time,BorderLayout.WEST);
    		display.add(displayTime,BorderLayout.CENTER);
    		display.add(history,BorderLayout.WEST);
    		display.add(docStorage,BorderLayout.EAST);
    		display.add(user,BorderLayout.NORTH);
    		display.add(messageError,BorderLayout.SOUTH);
    		display.setSize(100, 100);
    		displayTime.setSize(100,100);
    		
    		//Frame Initialization
    		Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
    		int width = (int)screenSize.getWidth();
    		int height = (int)screenSize.getHeight();
    		frame.setSize(width,height);
    		frame.getContentPane().add(display);
    		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    		frame.setVisible(true);
    	}
    	
    	public JTable getTable()
    	{
    		return stockage;
    	}
    
    	
    	public void Run()
    	{
    		
    		stockage.addMouseListener(new java.awt.event.MouseAdapter() 
    		{
    			public void mouseReleased(java.awt.event.MouseEvent evt) //React with the selected case (only stockage contents will react)
    			{
    				int caseColumnIndex = stockage.columnAtPoint(evt.getPoint());
    				int caseRowIndex = stockage.rowAtPoint(evt.getPoint());
    				messageError.setText("Message : " + stockage.getValueAt(caseRowIndex, caseColumnIndex));
    			}
    		});
    
    
    	}
    	
    	
    	public static void main(String[]args)
    	{
    		TestTableau test = new TestTableau();//Instantiation
    		test.initialize();
    		test.Run();
    		
    	}
    }
    
    • Partager sur Facebook
    • Partager sur Twitter
      24 novembre 2020 à 15:13:43

      le plus simple ne serait-il pas d'ajouter une colonne au début avec les périodes en valeurs ("8h00-9h00","9h00-10h00", ...) ?
      • Partager sur Facebook
      • Partager sur Twitter
        3 décembre 2020 à 11:44:08

        umfred a écrit:

        le plus simple ne serait-il pas d'ajouter une colonne au début avec les périodes en valeurs ("8h00-9h00","9h00-10h00", ...) ?


        Salut, 

        j'ai déjà essayé ta méthode, cependant, niveau esthétique c'est pas extraordinaire : même en modifiant les caractéristiques des cellules de la colonne des heures, il est très difficile de la rendre similaire aux headers déjà existants.

        Après, il est vrai que ta solution est sans aucuns doute la plus réalisable de toutes celles trouvées sur internet.

        J'arrive pas à comprendre pourquoi il n'y a pas default un constructeur prenant les colum headers et row headers :/

        bref, merci pour ta réponse !

        Si quelqu'un à par miracle une idée supplémentaire... :D

        • Partager sur Facebook
        • Partager sur Twitter
          3 décembre 2020 à 12:08:05

          a priori, une solution est que ta JList soit une JTable d'une colonne,  à mettre dans le JScrollPane via JScrollPane.setRowHeader(..)
          • Partager sur Facebook
          • Partager sur Twitter

          Java Appplication

          × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
          × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
          • Editeur
          • Markdown