2017-07-21 8 views
0

私は私の人生のために私が把握することができない問題があります。私はユーザーの入力を求めてから、JFrameを作成してその単語を表示します。私は(0,0)に単語を表示したいが、これはフィールド外にあるように見え、タイトルがあるところの先頭に書き込む。ここに私のコードは次のとおりです。drawString so(0,0)が描画領域内にあります

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); 
} 
} 

その後、私のテキストクラスで:

だから、
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); 
} 
} 

、あなたがこれを実行する場合は、ハロー、例えば、の下半分が表示されます。私は

this.text, 10, 10 

を設定している場合

は、あなたは単語全体を見ることができます。

(0,0)を左上隅に開始し、テキストを実際の描画領域内に完全に収める方法はありますか?

答えて

2

グラフィックスコンテキストの起点を指定して、指定した座標に表示させることができます。その後のdrawString(…, 0, 0)の呼び出しでは、その座標にbaselineのテキストがレンダリングされます。使用する座標を決定するには、FontMetricsを使用してください。 herehereの例は座標をdrawString()に渡しますが、代わりにtranslate()に渡すことができます。完了したら原点を元に戻してください。

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

JFrameにフローレイアウトまたはグリッドレイアウトを使用し、JLabelを追加してテキストを設定します。

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

JLabel label = new JLabel(); 
label.setText("Text"); 
frame.add(label); 
frame.setVisible(true); 
関連する問題