Partage
  • Partager sur Facebook
  • Partager sur Twitter

[Swing] Problème de dimensionnement

Anonyme
    21 août 2015 à 22:08:24

    Bonjour,

    J'ai récemment commencé à coder un projet mélangeant un GUI (codé à l'aide de javax swing / awt) et un système de bases de données (j'utilise MySQL).

    J'ai un problème de dimensionnement de texte dans la JPanel centrale.

    Premier essai:

    Deuxième essai:

    Voici le dernier code source de la fenêtre.

        public Window(String title, int[] size) {
        	this.wnd = new JFrame();
        	this.wnd.setTitle(title);
        	this.wnd.setSize(size[0], size[1]);
        	this.wnd.setLocationRelativeTo(null);
        	this.wnd.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            User.userLoggedOut();
        }
        // End of constructors
        
        // Methods
        public void buildWnd() {
        	// Menu bar setting
        	this.menuBar = new JMenuBar();
        	// Category File
        	this.file = new JMenu("File");
        	this.file.setMnemonic('F');
        	this.quit = new JMenuItem("Quit");
        	// Category User
        	this.user = new JMenu("User");
        	this.user.setMnemonic('U');
        	this.login = new JMenuItem("Login");
        	this.userInformations = new JMenuItem("Your user informations");
        	// Category Help
        	this.help = new JMenu("Help");
        	this.help.setMnemonic('H');
        	this.about = new JMenuItem("About");
        	// End of Menu bar setting
        	
        	// Menu items keys associations
        	this.quit.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_Q, KeyEvent.CTRL_DOWN_MASK));
        	this.login.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_L, KeyEvent.CTRL_DOWN_MASK));
        	this.userInformations.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_U, KeyEvent.CTRL_DOWN_MASK));
        	this.about.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F1, KeyEvent.CTRL_DOWN_MASK));
        	// End of Menu items keys associations
        	
        	// Menu items functions associations
        	this.quit.addActionListener(new ActionListener() {
        		public void actionPerformed(ActionEvent e) {
        			System.exit(0);
        		}
        	});
        	this.login.addActionListener(new ActionListener() {
        		public void actionPerformed(ActionEvent e) {
        			if (!User.isUserLoggedIn()) {
        				LoginPopup.showLoginPane();
        				if (User.isUserLoggedIn())
        					userLoggedIn();
        			} else {
        				User.userLogout();
        				userLoggedOut();
        			}
        			
        		}
        	});
        	this.userInformations.addActionListener(new ActionListener() {
        		public void actionPerformed(ActionEvent e) {
        			if (User.isUserLoggedIn()) { UserInfoPopup.showUserInfoPane(); }
        			else { UserInfoPopup.showLoggedOutUserInfoPane(); }
        		}
        	});
        	this.about.addActionListener(new ActionListener() {
        		public void actionPerformed(ActionEvent e) {
        			ProgramInfoPopup.showProgramInfoPane();
        		}
        	});
        	// End of Menu items functions associations
        	
        	// Menu bar disposition setting
        	this.file.addSeparator();
        	this.file.add(quit);
        	this.user.add(login);
        	this.user.add(userInformations);
        	this.help.add(about);
        	this.menuBar.add(file);
        	this.menuBar.add(user);
        	this.menuBar.add(help);
        	this.wnd.setJMenuBar(menuBar);
        	// End of Menu bar disposition setting
        	// Tabs part
        	this.tabGroup = new JTabbedPane();
        	// First Tab
        	this.tabAvailableContracts = new JPanel();
        	this.scrollTabAvailableContracts = new JScrollPane(this.tabAvailableContracts);
        	this.tabAvailableContracts.setSize(this.wnd.getPreferredSize());
        	// End of First Tab
        	// Filling of first tab
        	Map<String, Map<String, String>> res = QuickRequests.pickTableContent("java", "artemix", "passwd", "SELECT * FROM java.contract ORDER BY ID DESC LIMIT 10;");
        	if (res != null && !res.isEmpty()) {
        		int resultSize = res.size();
        		String[] thread = new String[resultSize],
        				 threadTitle = new String[resultSize];
        		
        		this.tabAvailableContracts.setLayout(new GridLayout(resultSize, 1));
        		
        		for (int i = 0; i < resultSize; i++) {
        			thread[i] = "<html><body style='width: " + this.wnd.getPreferredSize().getWidth() + "px'><p style='text-align: center;'>" + res.get(String.valueOf(i)).get("description") + "</p><br /><br />Contract author: " + res.get(String.valueOf(i)).get("author")
        					+ "<br />Contract Category: " + res.get(String.valueOf(i)).get("category") + " - Difficulty: " + res.get(String.valueOf(i)).get("difficulty") + "</body></html>";
        			threadTitle[i] = "#" + res.get(String.valueOf(i)).get("id") + ": " + res.get(String.valueOf(i)).get("title") + "   -   Reward: " + res.get(String.valueOf(i)).get("reward") + "€";
        			
        			JLabel printRes = new JLabel(thread[i]);
        			printRes.setBorder(BorderFactory.createTitledBorder(threadTitle[i]));
        			printRes.setMaximumSize(this.tabAvailableContracts.getSize());
        			this.tabAvailableContracts.add(printRes);
            	}
        	}
        	// End of Filling of first tab
        	// Second Tab
        	this.tabSendContract = new JPanel();
        	this.scrollTabSendContract = new JScrollPane(this.tabSendContract);
        	this.tabSendContract.setSize(this.wnd.getSize());
        	// End of Second Tab
        	this.tabGroup.addTab("Available contracts", this.scrollTabAvailableContracts);
        	this.tabGroup.addTab("Send a new contract", this.scrollTabSendContract);
        	this.wnd.getContentPane().add(tabGroup);
        	// End of tabs part
        }	// BUILDWND END


    J'aimerai que le JLabel ne puisse pas dépasser horizontalement les bordures de la fenêtre, en effectuant un retour à la ligne si nécessaire.

    • Partager sur Facebook
    • Partager sur Twitter
      24 août 2015 à 17:24:43

      Tu veux pas utiliser un JTextArea du coup? Ce serait plus simple :)
      • Partager sur Facebook
      • Partager sur Twitter
      Anonyme
        24 août 2015 à 18:20:32

        Triterium a écrit:

        Tu veux pas utiliser un JTextArea du coup? Ce serait plus simple :)


        Bon

        1 / Je ne sais pas l'utiliser, mais bon, tout s'apprend ^^

        2 / J'aimerai une mise en forme un peu montrée comme sur le screenshot (bordures non obligatoires), et si je me souviens bien, le JTextArea est un textfield étendu. Sinon, pourquoi pas

        • Partager sur Facebook
        • Partager sur Twitter
          24 août 2015 à 19:49:18

          Tu sais, les JTextArea c'est un component, si tu sais utiliser un JLabel tu sauras utiliser un JTextArea :p

          Tu devrais pouvoir enlever les bordures de ton JTextArea, changer le background s'il est de différente couleur, enfin tu peux faire plein de choses avec ^^

          Je teste pour voir si je peux avoir la même chose qu'un JLabel avec un JTextArea, mais je n'en doute pas trop :p

           Edit : bon ça marche très bien, tu fais un petit JTextArea avec setBorder(null) et setFont(tonJLabel.getFont()) et ça a l'allure d'un JLabel :)

          -
          Edité par Triterium 24 août 2015 à 20:12:37

          • Partager sur Facebook
          • Partager sur Twitter
          Anonyme
            24 août 2015 à 20:53:17

            Triterium a écrit:

            Tu sais, les JTextArea c'est un component, si tu sais utiliser un JLabel tu sauras utiliser un JTextArea :p

            Tu devrais pouvoir enlever les bordures de ton JTextArea, changer le background s'il est de différente couleur, enfin tu peux faire plein de choses avec ^^

            Je teste pour voir si je peux avoir la même chose qu'un JLabel avec un JTextArea, mais je n'en doute pas trop :p

             Edit : bon ça marche très bien, tu fais un petit JTextArea avec setBorder(null) et setFont(tonJLabel.getFont()) et ça a l'allure d'un JLabel :)

            -
            Edité par Triterium il y a 36 minutes

            Ok, merci de la réponse, je vais tester ça. Mais..

            J'ai par erreur supprimé mon dossier entier de dev java, donc tous mes projets à la poubelle, les seuls trucs qu'il me reste sont le code donné dans la question initiale du topic et la classe que j'ai écrit pour contacter la base de données, donc je mets le projet de côté jusqu'à ce que j'ai la patience de recommencer à dev (sûrement en cours de philo ou d'italien :P), et, si ça fonctionnera, je reviendrai up en mettant le resultat fonctionnel et en mettant le topic en résolu.

            • Partager sur Facebook
            • Partager sur Twitter
              24 août 2015 à 21:05:30

              Tu ne vuex pas essayer de passer un coup de logiciel pour retrouver tes données?

              Sinon bon courage :)

              • Partager sur Facebook
              • Partager sur Twitter
              Anonyme
                25 août 2015 à 11:14:58

                Triterium a écrit:

                Tu ne vuex pas essayer de passer un coup de logiciel pour retrouver tes données?

                Sinon bon courage :)


                Eventuellement, tu as un nom de programme sous la main?

                EDIT : J'en ai trouvé un sur un thread du clubic forum (première fois que je leur fais confiance à eux :euh:), il s'agit d'un programme du nom de "restoration", qui était conçu pour windows xp (ça date :D), mais il a parfaitement fonctionné et a su m'afficher et me restaurer les fichiers supprimés en quelques secondes, sans installation de programme inutile !

                -
                Edité par Anonyme 25 août 2015 à 11:20:21

                • Partager sur Facebook
                • Partager sur Twitter

                [Swing] Problème de dimensionnement

                × 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