Swingを使用してJavaプログラムを作成する必要があり、テキストを表示したいのですが、JLabel
(テキストコンポーネントを含む)を使用していません。拡張する必要がありますJFrame
。他にどのようなオプションがありますか?
4859 次
1 に答える
4
貴方はするべきではない:
JFrame
不必要に伸ばすJFrame
経由で直接描画paint(..)
あなたがすべき:
- オーバーライド
JComponent
_paintComponent(...)
- でカスタムペイントを行う
paintComponent(...)
、 JComponent
インスタンスを追加するJFrame
これがあなたのための例です:
import java.awt.Dimension;
import java.awt.Font;
import java.awt.FontMetrics;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
public class DrawSimpleText {
public DrawSimpleText() {
initComponents();
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
new DrawSimpleText();
}
});
}
private void initComponents() {
JFrame f = new JFrame();
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.getContentPane().add(new JPanel(true) {
Font font = new Font("Serif", Font.PLAIN, 20);
String s = "Java Source and Support";
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2 = (Graphics2D) g;
g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);
g2.setFont(font);
FontMetrics fm = g.getFontMetrics(font);
int width = fm.stringWidth(s);
Dimension d = getSize();
//center String/text
int cx = (d.width - width) / 2;
int cy = (d.height - fm.getHeight()) / 2 + fm.getAscent();
g2.drawString(s, cx, cy);
}
@Override
public Dimension getPreferredSize() {
return new Dimension(300, 100);
}
});
f.pack();
f.setVisible(true);
}
}
アップデート:
あなたのコメントによると、それはすべてのスイングルールと私自身の道徳に反しています:
ただし、それでもこれを行う必要がある場合(これがなぜ悪い習慣であるかを理解することはできません)、次のようになります。
import java.awt.Dimension;
import java.awt.Font;
import java.awt.FontMetrics;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import javax.swing.JFrame;
import javax.swing.SwingUtilities;
public class DrawSimpleText extends JFrame {
public DrawSimpleText() {
initComponents();
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
new DrawSimpleText();
}
});
}
private void initComponents() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
pack();
setVisible(true);
}
Font font = new Font("Serif", Font.PLAIN, 20);
String s = "Java Source and Support";
@Override
public void paint(Graphics g) {
super.paint(g);
Graphics2D g2 = (Graphics2D) g;
g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);
g2.setFont(font);
FontMetrics fm = g.getFontMetrics(font);
int width = fm.stringWidth(s);
Dimension d = getSize();
//center String/text
int cx = (d.width - width) / 2;
int cy = (d.height - fm.getHeight()) / 2 + fm.getAscent();
g2.drawString(s, cx, cy);
}
@Override
public Dimension getPreferredSize() {
return new Dimension(300, 100);
}
}
于 2012-10-23T17:33:30.733 に答える