2017-07-21 2 views
0

J'ai un problème que je ne peux pas comprendre pour la vie de moi. Je demande la saisie de l'utilisateur et puis il fait un JFrame et montre le mot. Je veux afficher le mot à (0,0) mais cela semble être hors du champ, et écrire dans le haut où le titre est. Voici mon code:Réglage drawString donc (0,0) est à l'intérieur de la zone de tirage

import java.util.Scanner; 
import javax.swing.*; 

public MainWindow(String input){ 
    JFrame frame = new JFrame(); 
    frame.setSize(320, 240); 
    frame.setTitle("Draw String Example"); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

    Text text = new Text(input); 
    frame.add(text); 
    frame.setVisible(true); 
} 

Scanner sc = new Scanner(System.in); 
    System.out.print("Enter a string: "); 
    String input = sc.nextLine(); 

    new MainWindow(input); 
} 
} 

Puis dans ma classe de texte:

import java.awt.*; 
import javax.swing.JComponent; 

public class Text extends JComponent { 
String text; 

public Text(String txt){ 
    this.text = txt; 
} 

public void paintComponent(Graphics g){ 
    Graphics2D g2d = (Graphics2D) g; 
    g2d.drawString(this.text, 0, 5); 
} 
} 

Donc, si vous exécutez cela, vous verrez la moitié inférieure, par exemple, bonjour.

si je mis

this.text, 10, 10 

alors vous pouvez voir le mot entier.

Y a-t-il un moyen de faire (0,0) commencer dans le coin le plus à gauche et d'avoir le texte complètement à l'intérieur de la zone de tirage actuelle?

Répondre

2

Vous pouvez translate() l'origine du contexte graphique afin qu'il apparaisse aux coordonnées que vous spécifiez. Les appels suivants à drawString(…, 0, 0) afficheront du texte avec le baseline à ces coordonnées. Utilisez FontMetrics pour déterminer les coordonnées à utiliser. Les exemples affichés here et here transmettent les coordonnées à drawString(), mais vous pouvez les passer à translate() à la place. Assurez-vous de restaurer l'origine lorsque vous avez terminé.

FontMetrics fm = g2d.getFontMetrics(); 
g2d.translate(0, fm.getAscent()); 
g2d.drawString(this.text, 0, 0); 
g2d.translate(0, 0); 
1

Utilisez une mise en page de flux ou d'une mise en page Grille à votre JFrame et ajouter un JLabel pour définir le texte.

JFrame frame = new JFrame(); 
frame.setLayout(new FlowLayout()); 

JLabel label = new JLabel(); 
label.setText("Text"); 
frame.add(label); 
frame.setVisible(true);