setBorder 메소드 내에서 Text1 및 Text2 텍스트에 대해 내 자신의 글꼴 및 색상 구성표를 정의 할 수있는 방법이 있나요? . java를 처음 사용하며 SUN 튜토리얼에서 찾을 수 없습니다.Java - setBorder의 글꼴/색상
같은TitledBorder
에서 당신은 문자열의 각 (예를 들어 Text1
및 Text2
)에 대한 다른 글꼴과 색상을 원하는 경우 사이먼
setBorder 메소드 내에서 Text1 및 Text2 텍스트에 대해 내 자신의 글꼴 및 색상 구성표를 정의 할 수있는 방법이 있나요? . java를 처음 사용하며 SUN 튜토리얼에서 찾을 수 없습니다.Java - setBorder의 글꼴/색상
같은TitledBorder
에서 당신은 문자열의 각 (예를 들어 Text1
및 Text2
)에 대한 다른 글꼴과 색상을 원하는 경우 사이먼
내 코드
//Create Positions Table
JPanel SpreadPanel = new JPanel();
SpreadPanel.setBorder(BorderFactory.createTitledBorder(" Text 1 Text 2"));
감사합니다, 당신은 할 수있다 AbstractBorder
을 확장하고 paintBorder()
을 재정의해야합니다. 기존의 구현은 하나의 제목에 대해 하나의 글꼴과 하나의 색상만을 가지고 있습니다.
답장을 보내 주셔서 감사합니다. – Simon
Java 및 Swing을 처음 사용하는 경우이 작업을 수행하는 JavaDocs는 다소 압도적입니다. BorderFactory에서의 JavaDoc을 현재 위치 : http://download.oracle.com/javase/1.5.0/docs/api/javax/swing/BorderFactory.html
가 여기 산세 리프 글꼴에서 텍스트 빨간색을의 예 :
import javax.swing.*;
import javax.swing.border.TitledBorder;
import java.awt.*;
import java.io.IOException;
public class ScratchSpace {
public static void main(String[] args) throws IOException {
Font myFont = new Font("SansSerif", Font.PLAIN, 10);
Color myColor = Color.RED;
TitledBorder titledBorder = BorderFactory.createTitledBorder(null, " Text 1 Text 2", TitledBorder.DEFAULT_JUSTIFICATION, TitledBorder.DEFAULT_POSITION, myFont, myColor);
JFrame frame = new JFrame();
final JLabel label = new JLabel("Hello gruel world");
label.setBorder(titledBorder);
frame.getContentPane().add(label);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
}
나는 그것이 오래된 질문 알고있다. 생각해 보겠습니다. 누군가이 문제를 해결하는 방법을 알고 있을지 모르겠지만 그것을 부활시키고 싶습니다. 나는 '부분적인 해결책'만을 가지고있다.
나는 아주 빨리 원하는대로하는 테두리를 구현했습니다. 자바가 제공하는 것, 즉 스윙 구성 요소의 HTML 해석을 재사용했습니다.
모든 작업이 멋지지만 텍스트의 글꼴 크기가 다른 경우를 제외하고는 테두리가 일반 텍스트 나 HTML 텍스트에 잘 그려집니다.
이 문제를 해결하는 방법을 모르겠습니다. 그러나 나는 해결책에 관심이 많다.
textLengthInPixels 변수를 계산할 때 프로 시저가 자체 글꼴 크기로 각 문자열의 너비를 합한 것임을 알고 있습니다.
문제는입니다.보기에서 가져온 방법은 모르겠지만 어떨까요?
import java.awt.Color;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.FontMetrics;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Insets;
import java.awt.Rectangle;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.border.AbstractBorder;
import javax.swing.border.Border;
import javax.swing.border.LineBorder;
import javax.swing.text.BadLocationException;
import javax.swing.text.View;
public class MultiColorTitleBorder extends AbstractBorder
{
private static final long serialVersionUID = 1L;
private JLabel label;
private int thicknessTop = 10;
private Border border;
private int thicknessLeft = 0;
private int thicknessRight = 0;
private int thicknessBottom = 0;
public MultiColorTitleBorder(String title)
{
this.label = new JLabel(title);
thicknessTop = label.getPreferredSize().height;
}
public MultiColorTitleBorder(String title, Border border)
{
this(title);
this.border = border;
thicknessLeft = border.getBorderInsets(null).left;
thicknessRight = border.getBorderInsets(null).right;
thicknessBottom = border.getBorderInsets(null).bottom;
}
@Override
public synchronized void paintBorder(Component c, Graphics g, int x, int y, int width, int height)
{
Graphics2D g2 = (Graphics2D) g;
View view = (View) label.getClientProperty("html");
String text = label.getText();
FontMetrics fm = g2.getFontMetrics(label.getFont());
int bY = y + fm.getAscent() - ((fm.getAscent() + fm.getDescent()))/2;
if(border != null)
{
Insets in = border.getBorderInsets(c);
g2.setClip(x, y, thicknessLeft * 2, height);
border.paintBorder(c, g, x, bY, width, height - bY);
try
{
if(view != null)
text = view.getDocument().getText(0, view.getDocument().getLength());
}catch(BadLocationException ex)
{
Logger.getLogger(MultiColorTitleBorder.class.getName()).log(Level.SEVERE, null, ex);
}
int textLengthInPixels = fm.stringWidth(text);
System.out.println("textLengthInPixels=" + textLengthInPixels);
g2.setClip(x +thicknessLeft * 2+ textLengthInPixels, y, width - thicknessLeft * 2 -textLengthInPixels, height);
border.paintBorder(c, g, x, bY, width, height - bY);
int bottomIn = in.bottom;
g2.setClip(x, height - bottomIn, width, bottomIn);
border.paintBorder(c, g, x, bY, width, height - bY);
g2.setClip(x, y, width, height);
}
if(view != null)
view.paint(g2, new Rectangle(x + thicknessLeft * 2, y, width - thicknessLeft * 2, height));
else
{
Font prevFont = g2.getFont();
g2.setFont(label.getFont());
g2.drawString(text, x + thicknessLeft * 2, fm.getAscent());
g2.setFont(prevFont);
}
}
@Override
public Insets getBorderInsets(Component c)
{
return new Insets(thicknessTop, thicknessLeft, thicknessBottom, thicknessRight);
}
@Override
public Insets getBorderInsets(Component c, Insets insets)
{
insets.top = thicknessTop;
insets.left = thicknessLeft;
insets.right = thicknessRight;
insets.bottom = thicknessBottom;
return insets;
}
@Override
public boolean isBorderOpaque()
{
return false;
}
public static void main(String[] args)
{
JPanel p = new JPanel();
p.setPreferredSize(new Dimension(200, 200));
String title = "<html><color=red> Text 1</font><font color=blue> Text 2</font>";
//title = "<html><font color=red font size=5> Text 1</font><font color=blue> Text 2</font>";
//title = "Text 1 Text 2";
p.setBorder(new MultiColorTitleBorder(title, new LineBorder(Color.CYAN, 6)));
p.setBackground(Color.YELLOW);
p.add(new JTextField(5));
JPanel contentPane = new JPanel();
contentPane.add(p);
JFrame f = new JFrame();
f.setContentPane(contentPane);
f.setSize(800, 600);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setVisible(true);
}
}
이 시도 :
.setBorder(UIManager.getBorder("TextField.border"));
그것이 효과가 있었고, 항상 나를 위해 일했습니다. – sabbibJAVA
setBorder(BorderFactory.createTitledBorder(null, "text", TitledBorder.CENTER, TitledBorder.BOTTOM, new Font("times new roman",Font.PLAIN,12), Color.yellow));
첫 번째 매개 변수 null 또는 (화합물 테두리에 대한) 또 다른 국경 당신의 3, 4 PARAM의 정당성과 위치를 표시하고 2 PARAM 텍스트 매개 변수 2의 텍스트
네 번째 매개 변수 및 다섯 번째 매개 변수는 글꼴 및 색을 설정하는 두 가지입니다
텍스트 글꼴 :
((javax.swing.border.TitledBorder) panel_1.getBorder()).setTitleFont(new Font("Tahoma", Font.PLAIN, 20));
텍스트 색 :
((javax.swing.border.TitledBorder)panel_1.getBorder()).setTitleColor(Color.WHITE);
이 (['API']를 참조하십시오 http://download.oracle.com/javase/6/docs/api/ javax/swing/BorderFactory.html) –