我必须使用Swing创建Java程序,我想显示一些文本,但不使用JLabel
(包括文本组件)!我必须延长JFrame
。我还有其他选择吗?
答案 0 :(得分:4)
你不应该:
JFrame
JFrame
paint(..)
你应该:
JComponent
s 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);
}
}
<强>更新强>
根据您的评论虽然它违反了所有Swing规则和我自己的道德:
但是如果你仍然需要来做这件事(我无法理解为什么这只是不好的做法),这里是如何:
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);
}
}