Alb*_*ert 6 java swing jlabel jbutton
在大多数系统上,我的JLabel中的内容都很好.它的存在方式应该始终足以显示其内容文本,因为我基本上这样做:
label.setText(text);
label.setFont(new Font(fontName, 0, 12));
int width = label.getFontMetrics(label.getFont()).stringWidth(text);
int height = 21; // this should always be enough
label.setBounds(new Rectangle(x, y, width, height));
Run Code Online (Sandbox Code Playgroud)
但是在某些系统上(不是我自己的,所以我无法真正调试它那么容易),它会剪切文本并在最后显示"......".
您可以在此处查看完整代码,您可以在此处查看示例(Abbildungen_Bijektiv_X3).
我也有一些类似的JButton案例.
我怎么能强迫Swing不这样做?(即使它认为组件太小.)
Swing究竟在哪里处理这个?我浏览了JButton一些相关类的代码但是我没有真正找到它切割文本的代码并添加了省略号.
不需要设置标签的边界.
这是布局管理器的工作.学习使用布局管理器,您将不会遇到此问题.
编辑:
布局经理使用:
label.setSize( label.getPreferredSize() );
Run Code Online (Sandbox Code Playgroud)
我现在正在这样做(对于按钮,但您可以以类似的方式对其他控件进行操作):
static public class ButtonUI extends MetalButtonUI {
public static ComponentUI createUI(JComponent c) {
return new ButtonUI();
}
@Override public void paint(Graphics g, JComponent c) {
JSimpleLabel.activateAntiAliasing(g);
AbstractButton b = (AbstractButton) c;
ButtonModel model = b.getModel();
String text = b.getText();
clearTextShiftOffset();
// perform UI specific press action, e.g. Windows L&F shifts text
if (model.isArmed() && model.isPressed()) {
paintButtonPressed(g,b);
}
FontMetrics metrics = g.getFontMetrics();
Rectangle2D stringBounds = metrics.getStringBounds(text, g);
g.drawString(text,
(b.getWidth() - (int)stringBounds.getWidth()) / 2,
metrics.getLeading() + metrics.getMaxAscent() + (b.getHeight() - (int)stringBounds.getHeight()) / 2);
if (b.isFocusPainted() && b.hasFocus()) {
Rectangle viewRect = new Rectangle();
final int inset = 1;
viewRect.x = inset;
viewRect.y = inset;
viewRect.width = b.getWidth() - (inset + viewRect.x) - 1;
viewRect.height = b.getHeight() - (inset + viewRect.y) - 1;
g.setColor(getFocusColor());
g.drawRect(viewRect.x, viewRect.y, viewRect.width, viewRect.height);
}
}
}
public void init() {
try {
UIManager.setLookAndFeel(new javax.swing.plaf.metal.MetalLookAndFeel() {
private static final long serialVersionUID = 1L;
@Override public UIDefaults getDefaults() {
UIDefaults table = super.getDefaults();
table.put("ButtonUI", ButtonUI.class.getName());
return table;
}
});
} catch (Exception e) {
e.printStackTrace();
}
// ...
}
Run Code Online (Sandbox Code Playgroud)